我有一个用Node.js编写的web服务器,我想用一个特定的文件夹启动。我不知道如何在JavaScript中访问参数。我运行的节点如下:
$ node server.js folder
这里server.js是我的服务器代码。Node.js帮助说这是可能的:
$ node -h
Usage: node [options] script.js [arguments]
如何在JavaScript中访问这些参数?不知怎么的,我在网上找不到这些信息。
我有一个用Node.js编写的web服务器,我想用一个特定的文件夹启动。我不知道如何在JavaScript中访问参数。我运行的节点如下:
$ node server.js folder
这里server.js是我的服务器代码。Node.js帮助说这是可能的:
$ node -h
Usage: node [options] script.js [arguments]
如何在JavaScript中访问这些参数?不知怎么的,我在网上找不到这些信息。
当前回答
乐观主义者(节点乐观主义者)
查看乐观主义库,它比手动解析命令行选项要好得多。
使现代化
Optimist已弃用。试试雅格士,它是乐观主义者的积极分支。
其他回答
如果您的脚本名为myScript.js,并且希望将名和姓“Sean Worthington”作为如下参数传递:
node myScript.js Sean Worthington
然后在脚本中写下:
var firstName = process.argv[2]; // Will be set to 'Sean'
var lastName = process.argv[3]; // Will be set to 'Worthington'
命令行参数值得一看!
您可以使用主要符号标准设置选项(了解更多信息)。这些命令都是等效的,设置相同的值:
$ example --verbose --timeout=1000 --src one.js --src two.js
$ example --verbose --timeout 1000 --src one.js two.js
$ example -vt 1000 --src one.js two.js
$ example -vt 1000 one.js two.js
要访问这些值,首先创建一个选项定义列表,描述应用程序接受的选项。type属性是setter函数(提供的值通过该函数传递),使您能够完全控制接收的值。
const optionDefinitions = [
{ name: 'verbose', alias: 'v', type: Boolean },
{ name: 'src', type: String, multiple: true, defaultOption: true },
{ name: 'timeout', alias: 't', type: Number }
]
接下来,使用commandLineArgs()解析选项:
const commandLineArgs = require('command-line-args')
const options = commandLineArgs(optionDefinitions)
选项现在看起来如下:
{
src: [
'one.js',
'two.js'
],
verbose: true,
timeout: 1000
}
高级用法
除了上述典型用法外,还可以配置命令行参数以接受更高级的语法形式。
基于命令的语法(git样式),格式为:
$ executable <command> [options]
例如
$ git commit --squash -m "This is my commit message"
命令和子命令语法(docker样式),格式如下:
$ executable <command> [options] <sub-command> [options]
例如
$ docker run --detached --image centos bash -c yum install -y httpd
生成使用指南
可以使用命令行用法生成使用指南(通常在设置--help时打印)。请参阅下面的示例并阅读文档以了解如何创建它们。
典型的使用指南示例。
聚合物cli使用指南是一个很好的现实例子。
进一步阅读
还有很多需要学习的内容,请参见wiki获取示例和文档。
一个简单的片段(如果需要):
var fs = require('fs'), objMod = {};
process.argv.slice(2).map(function(y, i) {
y = y.split('=');
if (y[0] && y[1]) objMod[y[0]] = y[1];
else console.log('Error in argument number ' + (i+1));
});
您可以使用system.args获取命令行参数。我使用下面的解决方案将参数解析为一个对象,这样我就可以按名称获取所需的参数。
var system = require('system');
var args = {};
system.args.map(function(x){return x.split("=")})
.map(function(y){args[y[0]]=y[1]});
现在你不需要知道参数的索引。像args.whatever一样使用它
注意:应该使用file.js x=1y=2这样的命名参数这一解决方案。
基于标准输入分析参数(--key=value)
const argv = (() => {
const arguments = {};
process.argv.slice(2).map( (element) => {
const matches = element.match( '--([a-zA-Z0-9]+)=(.*)');
if ( matches ){
arguments[matches[1]] = matches[2]
.replace(/^['"]/, '').replace(/['"]$/, '');
}
});
return arguments;
})();
命令示例
node app.js --name=stackoverflow --id=10 another-argument --text="Hello World"
argv的结果:console.log(argv)
{
name: "stackoverflow",
id: "10",
text: "Hello World"
}