如何以编程方式更新节点模块
我需要使用脚本中的npm
更新。 以下是我的代码:
var npm = require('npm'); npm.load(function () { npm.commands.outdated({json: true}, function (err, data) { //console.log(data); npm.commands.update(function(err, d){ console.log(d); }); }); });
当我运行这个脚本的时候,模块会被更新,但是新的版本并没有在package.json中指明。
当我从命令行运行npm update --save-dev
,会更新文件夹和package.json。
请build议如何通过脚本来实现这一点。 如何通过代码使用--save-dev
选项?
加载configuration时,您需要指定{save: true}
选项:
npm.load({save: true}, function() { // update code });
编辑:
npm.load
命令的'save-dev'
选项不起作用。 这里有个问题: https : //github.com/npm/npm/issues/2369 。
解决方法是重新安装过时的模块:
npm.load({'save-dev': true}, function () { npm.commands.outdated(function (err, rawOutdated) { var outdated = rawOutdated.map(function (module) { return module[1]; }); npm.commands.install(outdated, function(err, d) { }); }); });
我认为npm.commands.update
的第一个参数是一个参数列表。 我从来没有用npm编程,但看他们的源代码,我会尝试以下:
npm.commands.update(['--save-dev'], function(err, d){ console.log(d); });
参考是在这个testing: https : //github.com/npm/npm/blob/master/test/tap/update-save.js#L87