以编程方式安装提供其版本的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模块呢?

我知道我可以使用subprocess,但我想selectnpm模块解决scheme。

NPM NodeJS API没有很好的logging,但检查代码有帮助。

在这里我们find下面的string:

 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); }); }); 

我没有testing,但我确定我们可以使用任何格式的install.usage解决scheme。

我写了一个函数,它可以将数组中的dependencies对象转换为可以传递给install函数调用的函数。

dependencies:

 { "hello-world": "0.0.1" } 

该函数获取package.json文件的path并返回一个string数组。

 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模块来轻松地处理这个过程。

gpm的npmi库

要么

 npm install npmi 

当我编写一个具有依赖性的应用程序时,我使用package.json文件并将其与我的应用程序一起包含在目录中。 看起来可能有点像这样

 { "name": "MyApp", "description": "My App.", "version": "0.0.1", "dependencies": { "express": "3.4.3", "socket.io": "0.9.16" } } 

我想你可以使用类似的格式从命令行安装NPM。 使用package.json,你只需要执行npm install -d(假定-d代表“dependencies”)

你的问题是关于编程的。 你有没有试过简单的添加第二个参数(“npm @ version#”)?

如果我正在以编程方式进行,我可能会尝试这样的事情:

  var pjson = require('./package.json'); 

这样我可以维护版本控制,并使用package.json文件的简单性。

我在评论中添加了更多的信息,如果你还没有看,这里是npm安装的文档。 https://npmjs.org/doc/cli/npm-install.html

我一直无法挖掘任何关于您的具体情况的其他具体信息,也许没有方法通过编程安装版本,但这是没有意义的,它必须是可行的。