我想为全局安装的模块添加自我更新功能。有没有比这更好的方法?
require("child_process").exec("npm update -g module-name");
有一些documentation关于安装npm
作为本地依赖项。这有必要吗?是否有关于如何执行update
或install
等命令的示例代码?
答案 0 :(得分:2)
以下是我通常使用npm的系统副本而不是安装另一个npm副本作为本地模块的方法:
function loadNpm(cb) {
require('child_process').exec('npm', function(err, stdout, stderr) {
var m = /npm@[^ ]+ (.+)\n/i.exec(stdout);
if (!m)
return cb(new Error('Unable to find path in npm help message'));
cb(undefined, require(m[1]));
});
}
// usage ...
// only need to call `loadNpm()` once
loadNpm(function(err, npm) {
if (err) throw err;
// load() is required before using npm API
npm.load(function(err, npm) {
if (err) throw err;
// e.g. npm.search('ssh', true, function(err, results) { console.dir(results); });
});
});
答案 1 :(得分:2)
根据您的目标,以下是一些选项:
1)正如你所提到的那样通过exec()。不要忘记添加错误回调。
2)正如你所提到的那样使用npm包。
例如,我编写了一个快速脚本来全局安装Yeoman软件包,该软件运行良好。我没有看到很多文档,所以我开始阅读npm包本身的源代码。
var npm = require('npm');
npm.load (function (err, npm) {
if (err) {
console.log("Error loading");
return;
}
npm.config.set('global', true);
npm.commands.install(['yo'], function (err) {
if (err) {
console.error("Installation failed");
}
});
});
3)如果这是你的目标,另一个选择就是拥有一个cron作业自动更新包。
感兴趣