Захват аргументов командной строки с использованием 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

Другие вопросы по тегам