我有一个用Node.js编写的Web服务器,我想用特定的文件夹启动 . 我这样运行节点'm not sure how to access arguments in JavaScript. I'm:
$ node server.js folder
这里 server.js
是我的服务器代码 . Node.js帮助说这是可能的:
$ node -h
Usage: node [options] script.js [arguments]
我如何在JavaScript中访问这些参数?不知何故,我无法在网上找到这些信息 .
26 回答
Commander.js
适用于定义选项,操作和参数 . 它还会为您生成帮助页面 .
及时
如果您喜欢回调方法,那么非常适合从用户那里获取输入 .
共同提示
如果您喜欢生成器方法,那么非常适合从用户那里获取输入 .
在Node.js中检索参数的最简单方法是通过process.argv数组 . 这是一个全局对象,您可以使用它而无需导入任何其他库来使用它 . 您只需将参数传递给Node.js应用程序,就像我们之前展示的那样,并且可以通过process.argv数组在应用程序中访问这些参数 .
process.argv数组的第一个元素将始终是指向节点可执行文件的文件系统路径 . 第二个元素是正在执行的JavaScript文件的名称 . 第三个元素是用户实际传递的第一个参数 .
所有这些脚本都循环遍历process.argv数组并打印索引以及存储在这些索引中的元素 . 如果你质疑你接收的是什么参数,以及按什么顺序排序,它对于调试非常有用 .
您还可以使用yargs等库来处理commnadline参数 .
如果你想运行这样的东西:
或类似的东西:
这里有几个很好的答案,但这一切似乎都非常复杂 . 这与bash脚本访问参数值的方式非常相似,并且已经像mooGoo指出的那样已经为node.js提供了标准 . (只是为了让那些对node.js不熟悉的人理解)
例:
Stdio Library
在NodeJS中解析命令行参数的最简单方法是使用stdio模块 . 受UNIX
getopt
实用程序的启发,它如下所示:如果使用此命令运行上一代码:
那么
ops
对象将如下:所以你可以随意使用它 . 例如:
还支持分组选项,因此您可以编写
-om
而不是-o -m
.此外,
stdio
可以自动生成帮助/使用输出 . 如果您致电ops.printHelp()
,您将获得以下信息:如果未给出强制选项(在错误消息之前)或错误指定(例如,如果为选项指定单个arg且需要2),则还会显示上一条消息 .
您可以使用NPM安装stdio模块:
传递,解析参数是一个简单的过程 . Node为您提供了process.argv属性,该属性是一个字符串数组,它是调用Node时使用的参数 . 数组的第一个条目是Node可执行文件,第二个条目是脚本的名称 .
如果您使用以下参数运行脚本
文件:args.js
你会得到类似的数组
标准方法(无库)
参数存储在
process.argv
中这是the node docs on handling command line args:
这将产生:
没有librairies:使用Array.prototype.reduce()
对于此命令
node index.js count=2 print debug=false msg=hi
也,
我们可以改变
通过(更长)
自动解析布尔值和数字
command-line-args值得一看!
您可以使用主标记标准(learn more)设置选项 . 这些命令都是等效的,设置相同的值:
要访问这些值,首先要创建一个option definitions列表,描述应用程序接受的选项 . type属性是一个setter函数(提供的值通过它传递),使您可以完全控制接收的值 .
接下来,使用commandLineArgs()解析选项:
options
现在看起来像这样:高级用法
除了上面的典型用法,您还可以配置命令行参数以接受更高级的语法表单 .
Command-based syntax(git style)的形式:
例如 .
形式为Command and sub-command syntax(码头 Worker 样式):
例如 .
使用指南生成
可以使用command-line-usage生成使用指南(通常在设置
--help
时打印) . 请参阅下面的示例和read the documentation以获取有关如何创建它们的说明 .典型的使用指南示例 .
polymer-cli使用指南是一个很好的现实生活中的例子 .
进一步阅读
还有很多需要学习的内容,请参阅the wiki以获取示例和文档 .
一个简单的片段,如果有的话需要它:
使用 nconf https://github.com/flatiron/nconf之类的东西以集中方式管理配置可能是个好主意 .
它可以帮助您使用配置文件,环境变量,命令行参数 .
您可以使用
system.args
访问命令行参数 . 我使用下面的解决方案将参数解析为一个对象,所以我可以通过名称得到我想要的那个 .现在你不需要知道参数的索引 . 像
args.whatever
一样使用它如果您的脚本名为myScript.js,并且您希望传递名字和姓氏“Sean Worthington”,如下所示:
然后在你的脚本中你写:
这是使用minimist库的最新正确答案 . 我们曾经使用过node-optimist但它已经被弃用了 .
以下是直接从最小化文档中使用它的示例:
有一个应用程序 . 好吧,模块 . 好吧,不止一个,可能是几百个 .
Yargs是其中一个有趣的,它的文档很酷 .
这是github / npm页面的一个例子:
输出在这里(它用破折号等读取选项,短和长,数字等) .
您可以解析所有参数并检查它们是否存在 .
file:parse-cli-arguments.js:
不仅仅是:
proj.js
Terminal:
Result:
Explaination:
0
:机器中的node.exe目录(C:\ Program Files \ nodejs \ node.exe')1
:项目文件的目录 . (proj.js)2
:节点的第一个参数(arg1)3
:节点的第二个参数(arg2)4
:节点的第三个参数(arg3)你的实际参数从
2nd
索引argv
数组开始,即process.argv[2]
.大多数人给出了很好的答案 . 我还想在这里贡献一些东西 . 我使用
lodash
库提供答案,以迭代我们在启动应用程序时传递的所有命令行参数:要运行上面的代码,只需运行以下命令:
结果将是:
这是我的命名参数的0-dep解决方案:
例:
注意:当参数包含
=
时,自然会失败 . 这仅用于非常简单的用法 .Optimist(节点乐观主义者)
查看optimist library,它比手动解析命令行选项要好得多 .
Update
Optimist已被弃用 . 试试yargs这是乐观主义的活跃分支 .
如节点docs中所述process.argv属性返回一个数组,该数组包含启动Node.js进程时传递的命令行参数 .
例如,假设process-args.js的以下脚本:
启动Node.js进程:
会产生输出:
根据当前的野外趋势回答
2018:
香草javascript参数解析:
返回:
Official docs
最常用的NPM包用于参数解析:
Minimist :用于最小化参数解析 .
Commander.js :最常用的模块用于参数解析 .
Meow :Commander.js的替代品
Yargs :更复杂的参数解析(重) .
Vorpal.js :带有参数解析的成熟/交互式命令行应用程序 .
process.argv
是你的朋友,在Node JS中本机支持捕获命令行args . 见下面的例子::你也可以使用yargs包它会让事情变得容易!在这里你去:) Yargs
要像普通的javascript函数那样规范化参数,我会在node.js shell脚本中执行此操作:
请注意,第一个arg通常是nodejs的路径,第二个arg是您正在执行的脚本的位置 .
没有库
如果您想在vanilla JS / ES6中执行此操作,可以使用以下解决方案
仅在 NodeJS > 6 工作
而这个命令
将产生以下结果
附:如果你找到更优雅的解决方案,请更正 Map 中的代码并减少功能,谢谢;)