Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从nodejs脚本安装npm包?_Node.js_Web_Npm - Fatal编程技术网

Node.js 如何从nodejs脚本安装npm包?

Node.js 如何从nodejs脚本安装npm包?,node.js,web,npm,Node.js,Web,Npm,如何从nodejs脚本安装npm包 问题是不是关于简单安装npm包通过终端, 它是关于通过nodejs脚本安装的: 不是关于这个:npm install express,而是关于拥有内容为npm install express的install.js文件,我将像node install.js一样执行该文件,然后它将在该文件夹中本地安装express模块 对不起,谷歌和DuckDuckGo今天不是我的朋友( 主要问题是我的小型实用程序需要自动本地安装的软件包,因为全局软件包在windows中不工作。

如何从nodejs脚本安装npm包

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

对不起,谷歌和DuckDuckGo今天不是我的朋友(

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

检查它允许您使用节点编写命令行应用程序

然后可以使用
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();
希望这有帮助!

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

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

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


如果你不能
require('npm')
,这对你仍然没有帮助。我唯一能想到的就是尝试可能的绝对路径……你可以
require('C:\Program Files\Node\packages\x
)`,我想——或者在节点的全局包存储的任何地方(每个用户?)。请先在try/catch或test中对文件的存在性进行几次尝试,并在找到全局软件包的实际安装位置时尝试使用npm模块?您可能会勾选恶意软件扫描程序:-),但它可能会工作。

@Quentin my script找不到npm(我认为这是windows全局软件包的问题,这就是这个问题的原因。我陷入了一个递归问题。您是否尝试过“npm安装”?@Gabriellamas npm在Terminalse中成功运行请参见这里的问题谢谢,但是为了使用此问题,我需要安装npm package commander,此操作再次返回到我的问题。通过使用
var shell=require('shelljs');shell.exec('npm install'),您可以使命令执行部分更容易一些
Heh,但是在安装npm之前如何使用commanderJS呢?这是一个悖论。这不应该使用libs来实现。只使用本机节点函数。