Захват аргументов командной строки с использованием NCONF
У меня есть простой серверный скрипт node.js, и я хочу получить аргументы командной строки вместе с ключами / значениями из файла config.json и переменных среды. Со вторыми двумя у меня нет проблем, но у меня почти необъяснимые проблемы с захватом аргументов командной строки.
Я могу захватить аргументы командной строки следующим образом:
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 поможет?
3 ответа
Я считаю, что лучший способ сделать это так:
//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
с дополнительными дефисами / тире вы даете Bash знать, что аргументы предназначены для вашего исполняемого файла node.js, а не для исполняемого файла NPM node.js
Чуть короче / чище:
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