Программно установите пакет NPM, предоставляющий его версию
нашел как установить пакеты npm программно и код работает нормально:
var npm = require("npm");
npm.load({
loaded: false
}, function (err) {
// catch errors
npm.commands.install(["my", "packages", "to", "install"], function (er, data) {
// log the error or data
});
npm.on("log", function (message) {
// log the progress of the installation
console.log(message);
});
});
если я хочу установить первую версию hello-world
пакет, как я могу сделать это на стороне NodeJS, используя npm
модуль?
Я знаю, что могу использовать дочерний процесс, но я хочу выбрать npm
решение модуль.
4 ответов
npm NodeJS API не хорошо документирован,но проверка кода помогает.
здесь мы находим следующую строку:
install.usage = "npm install"
+ "\nnpm install <pkg>"
+ "\nnpm install <pkg>@<tag>"
+ "\nnpm install <pkg>@<version>"
+ "\nnpm install <pkg>@<version range>"
+ "\nnpm install <folder>"
+ "\nnpm install <tarball file>"
+ "\nnpm install <tarball url>"
+ "\nnpm install <git:// url>"
+ "\nnpm install <github username>/<github project>"
+ "\n\nCan specify one or more: npm install ./foo.tgz bar@stable /some/folder"
+ "\nIf no argument is supplied and ./npm-shrinkwrap.json is "
+ "\npresent, installs dependencies specified in the shrinkwrap."
+ "\nOtherwise, installs dependencies from ./package.json."
мой вопрос о версии, поэтому мы можем сделать: hello-world@0.0.1
установить 0.0.1
версия hello-world
.
var npm = require("npm");
npm.load({
loaded: false
}, function (err) {
// catch errors
npm.commands.install(["hello-world@0.0.1"], function (er, data) {
// log the error or data
});
npm.on("log", function (message) {
// log the progress of the installation
console.log(message);
});
});
я не тестировал, но уверен, что мы можем использовать любой формат install.usage
решений.
я написал функцию, которая преобразует dependencies
объект в массиве, который может быть передан the install
вызов функции.
dependencies:
{
"hello-world": "0.0.1"
}
функция получает путь к package.json
file и возвращает массив строк.
function createNpmDependenciesArray (packageFilePath) {
var p = require(packageFilePath);
if (!p.dependencies) return [];
var deps = [];
for (var mod in p.dependencies) {
deps.push(mod + "@" + p.dependencies[mod]);
}
return deps;
}
поскольку я много делаю для своей работы, я написал простой, но эффективный модуль nodeJS для легкой обработки процесса.
или
npm install npmi
Я автор модуля, который позволяет делать то, что вы имеете в виду. См.live-плагин-менеджер.
вы можете установить и запустить практически любой пакет из NPM, Github или из папки.
вот пример:
import {PluginManager} from "live-plugin-manager";
const manager = new PluginManager();
async function run() {
await manager.install("moment");
const moment = manager.require("moment");
console.log(moment().format());
await manager.uninstall("moment");
}
run();
В приведенном выше коде я установить moment
пакет во время выполнения, загрузите и выполните его. В конце я удаляю его.
внутренне я не бегу npm
cli, но на самом деле загружает пакеты и запускается внутри узла VM песочница.
для установки определенной версии просто используйте:
await manager.install("moment", "2.20.1");
когда я пишу приложение, которое имеет зависимости я использую пакет.JSON-файл и включить его в каталог с моего приложения. Это выглядит примерно так.
{
"name": "MyApp",
"description": "My App.",
"version": "0.0.1",
"dependencies": {
"express": "3.4.3",
"socket.io": "0.9.16"
}
}
Я думаю, вы можете использовать аналогичный формат для установки с NPM из командной строки. С пакетами.json вы просто делаете npm install-d (предполагая, что-d означает "зависимости")
вы вопрос о том, чтобы сделать это программно. Вы пробовали просто добавить второй аргумент, например ("npm@version #")?
Если бы я делал это программно, я мог бы попробовать что-то вроде этого:
var pjson = require('./package.json');
таким образом, я могу осуществлять контроль и простота упаковки.файл json.
я добавил дополнительную информацию в комментариях, если вы еще не посмотрели, вот документы для установки npm. https://npmjs.org/doc/cli/npm-install.html
Я не смог откопать любую другую конкретную информацию о вашем конкретном случае, возможно нет никакого метода для установки по версии программно, но это не имеет смысла, это должно быть выполнимо.