开发者问题收集

如何将命令行参数传递给 Node.js 程序并接收它们?

2010-12-04
1843677

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

$ node server.js folder

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

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

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

3个回答

标准方法(无库)

参数存储在 process.argv

以下是 有关处理命令行参数的节点文档:

process.argv is an array containing the command line arguments. The first element will be 'node', the second element will be the name of the JavaScript file. The next elements will be any additional command line arguments.

// 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
MooGoo
2010-12-04

为了像常规 javascript 函数接收的那样规范化参数,我在 node.js shell 脚本中执行以下操作:

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

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

Mauvis Ledford
2011-04-23

目前为止,正确的答案是使用 minimist 库。我们曾经使用 node-optimist ,但后来它已被弃用。

以下是直接从 minimist 文档中获取的使用示例:

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' }
real_ate
2014-07-08