如何从nodejs脚本安装npm包?

时间:2013-01-27 14:12:52

标签: node.js web npm

如何从nodejs脚本安装npm包?

问题 关于简单的安装 npm软件包通过终端 ,<登记/> 它是关于通过nodejs脚本安装
不是这个:npm install express,而是关于拥有内容install.js的{​​{1}}文件,我将执行npm install express,之后将在本地安装 express 此文件夹中的模块。

很抱歉,Google和DuckDuckGo今天不是我的朋友(

主要问题是我的小型实用程序的自动本地安装所需的软件包,因为全局软件包在Windows中不起作用。

2 个答案:

答案 0 :(得分:5)

签出commander.js它允许您使用节点编写命令行应用程序。

然后您可以使用exec模块。

假设您在install.js中添加了以下内容,则必须执行:./install.js并为您运行npm install

#!/usr/bin/env node

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

var run = function(cmd){
  var child = exec(cmd, function (error, stdout, stderr) {
    if (stderr !== null) {
      console.log('' + stderr);
    }
    if (stdout !== null) {
      console.log('' + stdout);
    }
    if (error !== null) {
      console.log('' + error);
    }
  });
};

program
  .version('0.1.3')
  .option('i, --install ', 'install packages')
  .parse(process.argv);



if (program.install) {
  run('npm install');
}


var count = 0;


// If parameter is missing or not supported, display help
program.options.filter(function (option) {
  if(!(option.short == process.argv[2]))
    count++
});

if(count == program.options.length)
  program.help();

希望这有帮助!

答案 1 :(得分:3)

注意:我认为这不符合您问题的所有要求,因为最后您声明找不到npm ...所以也许您的问题可以更好地标题“如何在没有npm的情况下安装npm包?” - 哎呀!但它解决了标题“如何从nodejs脚本安装npm包?”

我刚刚展示了另一种方法:模块npmi。虽然这仍然是另一个模块依赖,但它至少在没有* nix shell脚本环境的情况下工作,我认为这里的另一个答案(关于commander.js)确实如此。而且,如果你查看npmi.js的代码,你会发现它很短,只是直接在节点脚本中使用npm模块 - 如果你不想添加npmi,你可以自己做模块。

因此,在我们的案例中,我们需要一种安装模块的方法,而不需要* nix shell脚本(以支持Windows用户),这很符合这个要求。

如果你不能require('npm'),那对你仍无济于事。只有我能想到的就是尝试可能的绝对路径...你可以require('C:\Program Files\Node\packages\x)`,我想 - 或者节点的全局包存储在哪里(每个用户?)。首先尝试使用try / catch或测试文件存在的几次尝试,并在找到实际安装全局软件包的位置时尝试使用npm模块?您可以勾选恶意软件扫描程序:-),但它可能会有效。