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

Kri*_*eni 6 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);
    });
   });
});
Run Code Online (Sandbox Code Playgroud)

当我运行此脚本时,模块会更新,但package.json中未指示新版本.

当我从命令行运行时npm update --save-dev ,文件夹和package.json得到更新.

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

gne*_*kus 2

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

npm.load({save: true}, function() {
  // update code
});
Run Code Online (Sandbox Code Playgroud)

编辑:

该命令'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) {

    });
   });
});
Run Code Online (Sandbox Code Playgroud)

  • 我已经确认 `save-dev: true` 不起作用。解决方法是使用“npm install”而不是“npm update”。 (2认同)