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

时间:2016-06-04 03:09:39

标签: javascript node.js npm

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

请建议如何通过脚本实现这一目标。 如何通过代码使用--save-dev选项?

2 个答案:

答案 0 :(得分:2)

我认为npm.commands.update中的第一个参数是一个参数列表。我从来没有以编程方式使用过npm,但是看看他们的源代码我会尝试以下内容:

npm.commands.update(['--save-dev'], function(err, d){
    console.log(d);
});

此测试的引用是:https://github.com/npm/npm/blob/master/test/tap/update-save.js#L87

答案 1 :(得分:2)

加载配置时,您需要指定{save: true}选项:

npm.load({save: true}, function() {
  // update code
});

修改

'save-dev'命令的npm.load选项不起作用。这里有一个问题: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) {

    });
   });
});