2016-08-17 4 views
1

I командир установки с defaultArgs так:Commander не использует значения по умолчанию

import * as validations from './validation' 
import program from 'commander' 
import path from 'path' 

export default function initializeCommander (defaults) { 
    program 
    .version('0.0.1') 
    .usage('redbubble-demo') 
    .option('-u', '--url [url]', validations.isValidUrl, defaults.url) 
    .option('-o', '--output-dir [path]', validations.hasValidParentDirectory, path.resolve(defaults.path)) 
    .option('-s', '--size [size]', validations.isValidSize, defaults.size) 
    .parse(process.argv) 

    return program 
} 

У меня есть значения по умолчанию, заданные здесь, и передать их функции, как это:

const defaultValues = { 
    url: 'someuRL', 
    size: 'medium', 
    outputDir: './www' 
} 
const program = initializeCommander(defaultValues) 
console.log(program) //no value in console 

Когда я пытаюсь и получить доступ к параметрам от program, я не получаю никаких значений.

Я называю мое приложение без каких-либо аргументов, используя:

babel-node src/index.js 

UPDATE:

Я могу запустить приложение в качестве бинарной теперь используют npm link, но я получаю эту ошибку:

TypeError: Path must be a string. Received undefined 
    at assertPath (path.js:7:11) 
    at Object.resolve (path.js:1146:7) 
    at initializeCommander (/home/vamsi/Do/redbubble-demo/build/index.js:9889:222) 
    at Object.<anonymous> (/home/vamsi/Do/redbubble-demo/build/index.js:87:34) 
    at __webpack_require__ (/home/vamsi/Do/redbubble-demo/build/index.js:22:30) 
    at /home/vamsi/Do/redbubble-demo/build/index.js:42:18 
    at Object.<anonymous> (/home/vamsi/Do/redbubble-demo/build/index.js:45:10) 
    at Module._compile (module.js:541:32) 
    at Object.Module._extensions..js (module.js:550:10) 
    at Module.load (module.js:458:32) 

Номера строк в stack trace отключены, потому что я использую webpack, чтобы связать его.

ответ

1

Мне любопытно, почему вы используете веб-пакет для связывания узла cli. Традиционно связки, такие как webpack или браузер, используются для репликации системы модулей узлов для проектов на стороне клиента, а не для серверных. (Сегодня я узнал, что это альтернатива JSPM/столпотворение-узел.)

Commander бросает исключение, потому что ваша группа по умолчанию называется outputDir не path но вы передаете path.resolve(defaults.path)) в вашем определении командира.

+0

Я использую webpack, потому что у меня есть операторы 'import' по всему моему коду. Кроме того, я читал http://jlongster.com/Backend-Apps-with-Webpack--Part-I. Он не обрабатывает длинные аргументы, такие как '--output-dir', но корректно работает с' -o'. Как я могу обработать длинные аргументы? – vamsiampolu

Смежные вопросы