使用 NCONF 捕获命令行参数
Capturing command line arguments using NCONF
我有一个简单的 node.js 后端脚本,我想从 config.json 文件和环境变量中捕获命令行参数以及 keys/values。后两个我没有问题,但我在捕获命令行参数时遇到了几乎无法解释的问题。
我可以以这种方式捕获命令行参数:
var nconf = require('nconf');
nconf.argv().env().file({file: './config.json'});
var csvFilePath = nconf.argv().get()._[0]; // var csvFilePath = process.argv[2];
var csvType = nconf.argv().get()._[1]; // var csvType = process.argv[3];
这两个调用等同于process.argv[index],只不过索引变了。
必须有一种更直接的方法来捕获命令行参数,但即使我调试并查看 nconf 产生的变量,我仍然无法弄清楚。
有nconf经验的人愿意帮忙吗?
我认为最好的方法是这样的:
//contents of app.js
var nconf = require('nconf').argv();
如果您使用以下命令行命令调用您的程序:
node app.js --one foo --two bar
然后在您的程序中,您可以像这样访问这些命令行参数:
var nconf = require('nconf').argv();
var one = nconf.get('one'); //one = 'foo'
var two = nconf.get('two'); //two = 'bar'
所以你需要在标识符前面加上--符号,然后你就可以访问命令行参数了。
坦率地说,作为给 nconf 模块作者查理罗宾斯的信息,我认为最好不要将所有内容都混合到一个大哈希中。
如果你这样做会更好:
var foo = nconf.argv.get('one');
var node_env = nconf.env.get('NODE_ENV');
我认为它更直观,更不容易出错。
此外,对于那些具有 'npm start' 的起始节点:
据我所知,您需要两个额外的连字符,如下所示:
npm start -- --one foo --two bar
使用额外的 hyphens/dashes 你让 Bash 知道这些参数是给你的 node.js 可执行文件的,而不是给 NPM node.js 可执行文件的
略shorter/cleaner:
var nconf = require('nconf');
nconf.argv().env().file({file: './config.json'});
var csvFilePath = nconf.get('_')[0]; // var csvFilePath = process.argv[2];
var csvType = nconf.get('_')[1]; // var csvType = process.argv[3];
如果您命名参数(例如,--foo=bar
或 -f bar
),则可以使用 .get('foo')
或 .get('f')
而不是使用数组索引。
试试这个
npm start -- --one foo --two bar
它在 windows
对我有用
我有一个简单的 node.js 后端脚本,我想从 config.json 文件和环境变量中捕获命令行参数以及 keys/values。后两个我没有问题,但我在捕获命令行参数时遇到了几乎无法解释的问题。
我可以以这种方式捕获命令行参数:
var nconf = require('nconf');
nconf.argv().env().file({file: './config.json'});
var csvFilePath = nconf.argv().get()._[0]; // var csvFilePath = process.argv[2];
var csvType = nconf.argv().get()._[1]; // var csvType = process.argv[3];
这两个调用等同于process.argv[index],只不过索引变了。
必须有一种更直接的方法来捕获命令行参数,但即使我调试并查看 nconf 产生的变量,我仍然无法弄清楚。
有nconf经验的人愿意帮忙吗?
我认为最好的方法是这样的:
//contents of app.js
var nconf = require('nconf').argv();
如果您使用以下命令行命令调用您的程序:
node app.js --one foo --two bar
然后在您的程序中,您可以像这样访问这些命令行参数:
var nconf = require('nconf').argv();
var one = nconf.get('one'); //one = 'foo'
var two = nconf.get('two'); //two = 'bar'
所以你需要在标识符前面加上--符号,然后你就可以访问命令行参数了。
坦率地说,作为给 nconf 模块作者查理罗宾斯的信息,我认为最好不要将所有内容都混合到一个大哈希中。
如果你这样做会更好:
var foo = nconf.argv.get('one');
var node_env = nconf.env.get('NODE_ENV');
我认为它更直观,更不容易出错。
此外,对于那些具有 'npm start' 的起始节点:
据我所知,您需要两个额外的连字符,如下所示:
npm start -- --one foo --two bar
使用额外的 hyphens/dashes 你让 Bash 知道这些参数是给你的 node.js 可执行文件的,而不是给 NPM node.js 可执行文件的
略shorter/cleaner:
var nconf = require('nconf');
nconf.argv().env().file({file: './config.json'});
var csvFilePath = nconf.get('_')[0]; // var csvFilePath = process.argv[2];
var csvType = nconf.get('_')[1]; // var csvType = process.argv[3];
如果您命名参数(例如,--foo=bar
或 -f bar
),则可以使用 .get('foo')
或 .get('f')
而不是使用数组索引。
试试这个
npm start -- --one foo --two bar
它在 windows
对我有用