如何以编程方式更新节点模块

我需要使用脚本中的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