1

有一些小东西,但它让我很烦。当您想使用节点模块时,您必须手动安装它,需要它并将其添加到 package.json 中。如果你不想使用它,倒过来也是一样的。

是否有一个工具可以在需要模块后自动安装/删除到 node_modules 并从 package.json 添加/删除。

如果现在以后不存在,那么它必须存在。

4

3 回答 3

3

这是一个相当有趣的问题。我找不到解决方案,所以我自己写了一个小脚本。想象一下,您的主文件包含以下内容。

index.js:

var colors = require('colors');
console.log('this comes from my main file');

如果您没有colors安装并运行node index.js,您将收到错误消息Error: Cannot find module 'colors'

为了使这项工作创建另一个module.js文件,您将运行该文件而不是您的index.js文件。

模块.js:

var exec = require('child_process').exec;

try {
  // require your main file here
  require('./index');
} catch(e) {
  if (e.code === 'MODULE_NOT_FOUND') {
    var message = e.message;
    console.log(message);
    var module = message.match(/\'([a-z]+)\'/)[1];
    console.log('Installing ' + module + ' ...');
    exec('npm install ' + module + ' --save', function(error, stdout, stderr) {
      if (error) console.log(error);
      console.log(JSON.stringify(stdout).replace(/\\n/g, "") + ' successfully installed');
    });
  }
}

现在运行node module.js,你会得到以下

Cannot find module 'colors'
Installing colors ...
"colors@0.6.0-1 node_modules/colors" successfully installed

如果你node module.js再次运行,你会得到

this comes from my main file // this is what you want

colors添加到您的package.json文件中。您可以module.js在每个项目中重复使用,只需更改require函数即可获得正确的文件。

于 2012-10-17T19:05:13.107 回答
1

我不知道有任何工具会在您修改源代码时自动安装包。如果你真的想要的话,应该不会那么难做:)

正如凯尔所说,--save可以为你想要的。还有npm shrinkwrap一个会为您拍摄快照node_modules并更新它为您管理的文件。只需将该文件检入 git,然后如果您部署到 Heroku(或其他任何npm install使用package.json.

于 2012-10-15T08:00:20.727 回答
1

npm 可以使用--saveflag:npm install [package] --savenpm install [package] --save-dev用于 devDependencies 来完成。查看 npm 安装文档:https ://npmjs.org/doc/install.html

于 2012-10-15T07:08:07.297 回答