改进express.js模块的使用

时间:2012-10-15 06:41:40

标签: node.js express node-modules

有一些小事但它让我烦恼。如果要使用节点模块,则必须手动安装它,需要它并将其添加到package.json中。如果你不想使用它,那就是倒退了。

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

如果不是以后就必须存在这种简单的事情。

3 个答案:

答案 0 :(得分: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文件。

module.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函数即可获取正确的文件。

答案 1 :(得分:1)

npm可以使用--save标志:npm install [package] --savenpm install [package] --save-dev来执行devDependencies。查看npm安装文档:https://npmjs.org/doc/install.html

答案 2 :(得分:1)

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

正如凯尔所说,--save可以满足您的需求。还有npm shrinkwrap可以拍摄node_modules的快照,并更新它为您管理的文件。只需将该文件检入git,然后如果部署到Heroku(或使用npm install的任何其他地方),它将使用该文件而不是package.json文件作为依赖项。