Подтвердить что ты не робот

Захват аргументов командной строки с использованием NCONF

У меня есть простой node.js backend script, и я хочу захватить аргументы командной строки вместе с ключами/значениями из файла config.json и переменных среды. Во вторых, у меня нет проблем, но у меня есть почти необъяснимые проблемы с захватом командной строки args.

Я могу захватить аргументы командной строки таким образом:

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, может помочь?

4b9b3361

Ответ 1

Я считаю, что лучший способ сделать это так:

//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 Charlie Robbins, я думаю, что лучше не смешивать все в один большой хэш.

Было бы лучше, если бы вы сделали это вместо:

var foo = nconf.argv.get('one');
var node_env = nconf.env.get('NODE_ENV');

Я думаю, что он более интуитивно понятен и менее подвержен ошибкам.

Кроме того, для тех, кто запускает node с 'npm start':

Насколько мне известно, вам нужны два дополнительных дефиса:

npm start -- --one foo --two bar

с дополнительными дефисами/черточками, которые вы позволяете Bash знать, что аргументы для вашего исполняемого файла node.js, а не для исполняемого файла NPM node.js

Ответ 2

Немного короче/чище:

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'), а не использовать индекс массива.