我找到了如何以编程方式安装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软件包的第一个版本,如何使用npm模块在NodeJS端进行安装?
hello-world
npm
我知道我可以使用子进程,但是我想选择npm模块解决方案。
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。
hello-world@0.0.1
0.0.1
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解决方案。
install.usage
我编写了一个函数,该函数将dependencies对象转换为可以传递给install函数调用的数组。
dependencies
install
dependencies:
{ "hello-world": "0.0.1" }
该函数获取package.json文件的路径并返回字符串数组。
package.json
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; }