14

如何从 nodejs 脚本安装 npm 包?

问题不是关于通过终端简单安装npm 包
而是关于通过 nodejs 脚本安装
不是关于这个:npm install express,而是关于有install.js内容的文件npm install express,我将执行node install.js它,然后它将在此文件夹中本地安装express模块。

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

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

4

2 回答 2

6

查看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();

希望这可以帮助!

于 2013-01-27T15:08:36.407 回答
3

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

我刚刚看到了另一种替代方法:模块npmi。虽然这仍然是另一个模块依赖项,但它至少可以在没有 *nix shell 脚本环境的情况下工作,我认为这里的另一个答案 (about commander.js) 可以。而且,如果您查看 的代码npmi.js,您会发现它非常短,并且仅在节点脚本中直接使用 npm 模块——如果您不想添加 npmi 模块,您可以自己做。

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

如果你不能,那仍然对你没有帮助require('npm')。我唯一能想到的就是尝试可能的绝对路径......你可以require('C:\Program Files\Node\packages\x)`,我认为 - 或者节点的全局包存储在哪里(每个用户?)。在 try/catch 中进行几次尝试,或者首先测试文件是否存在,然后在找到全局包的实际安装位​​置时尝试要求 npm 模块?您可能会勾选恶意软件扫描程序:-),但它可能会起作用。

于 2015-10-18T05:36:12.873 回答