如何从nodejs脚本安装npm包?
问题 不 关于简单的安装 npm软件包通过终端 ,<登记/>
它是关于通过nodejs脚本安装:
不是这个:npm install express
,而是关于拥有内容install.js
的{{1}}文件,我将执行npm install express
,之后将在本地安装 express 此文件夹中的模块。
很抱歉,Google和DuckDuckGo今天不是我的朋友(
主要问题是我的小型实用程序的自动本地安装所需的软件包,因为全局软件包在Windows中不起作用。
答案 0 :(得分:5)
签出commander.js它允许您使用节点编写命令行应用程序。
然后您可以使用exec
模块。
假设您在install.js
中添加了以下内容,则必须执行:./install.js
并为您运行npm install
。
#!/usr/bin/env node
var program = require('commander');
var exec = require('child_process').exec;
var run = function(cmd){
var child = exec(cmd, function (error, stdout, stderr) {
if (stderr !== null) {
console.log('' + stderr);
}
if (stdout !== null) {
console.log('' + stdout);
}
if (error !== null) {
console.log('' + error);
}
});
};
program
.version('0.1.3')
.option('i, --install ', 'install packages')
.parse(process.argv);
if (program.install) {
run('npm install');
}
var count = 0;
// If parameter is missing or not supported, display help
program.options.filter(function (option) {
if(!(option.short == process.argv[2]))
count++
});
if(count == program.options.length)
program.help();
希望这有帮助!
答案 1 :(得分:3)
注意:我认为这不符合您问题的所有要求,因为最后您声明找不到npm
...所以也许您的问题可以更好地标题“如何在没有npm的情况下安装npm包?” - 哎呀!但它解决了标题“如何从nodejs脚本安装npm包?”
我刚刚展示了另一种方法:模块npmi。虽然这仍然是另一个模块依赖,但它至少在没有* nix shell脚本环境的情况下工作,我认为这里的另一个答案(关于commander.js
)确实如此。而且,如果你查看npmi.js
的代码,你会发现它很短,只是直接在节点脚本中使用npm模块 - 如果你不想添加npmi,你可以自己做模块。
因此,在我们的案例中,我们需要一种安装模块的方法,而不需要* nix shell脚本(以支持Windows用户),这很符合这个要求。
如果你不能require('npm')
,那对你仍无济于事。只有我能想到的就是尝试可能的绝对路径...你可以require('C:\Program Files\Node\packages\x
)`,我想 - 或者节点的全局包存储在哪里(每个用户?)。首先尝试使用try / catch或测试文件存在的几次尝试,并在找到实际安装全局软件包的位置时尝试使用npm模块?您可以勾选恶意软件扫描程序:-),但它可能会有效。