协慌网

登录 贡献 社区

如何将命令行参数传递给 Node.js 程序?

我有一个用Node.js编写的 Web 服务器,我想用特定的文件夹启动。我不确定如何在 JavaScript 中访问参数。我正在运行这样的节点:

$ node server.js folder

这里server.js是我的服务器代码。 Node.js 帮助说这是可能的:

$ node -h
Usage: node [options] script.js [arguments]

我如何在 JavaScript 中访问这些参数?不知何故,我无法在网上找到这些信息。

答案

标准方法(无库)

参数存储在process.argv

以下是处理命令行 args 的节点文档:

process.argv是一个包含命令行参数的数组。第一个元素是'node',第二个元素是 JavaScript 文件的名称。下一个元素将是任何其他命令行参数。

// print process.argv
process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});

这将产生:

$ node process-2.js one two=three four
0: node
1: /Users/mjr/work/node/process-2.js
2: one
3: two=three
4: four

要像普通的 javascript 函数那样规范化参数,我会在 node.js shell 脚本中执行此操作:

var args = process.argv.slice(2);

请注意,第一个 arg 通常是 nodejs 的路径,第二个 arg 是您正在执行的脚本的位置。

最新的正确答案,它使用最小的库。我们过去常常使用node-optimist,但后来不推荐使用它。

以下是直接从最小化文档中使用它的示例:

var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);

-

$ node example/parse.js -a beep -b boop
{ _: [], a: 'beep', b: 'boop' }

-

$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
{ _: [ 'foo', 'bar', 'baz' ],
  x: 3,
  y: 4,
  n: 5,
  a: true,
  b: true,
  c: true,
  beep: 'boop' }