27

I want to create a script with node and node commander and when i try to grab the values of my args i get the value true instead the value itself.

For example if i write this in terminal:

node myfile.js -s somefile -d test

var program = require('commander');

program
  .version('0.0.1')
  .option('-s, --src', 'src csv file')
  .option('-d, --destination', 'destination csv file')
  .parse(process.argv);

console.log(program.src); // return true
console.log(program.destination); // return true

How i get the value of this args?

  • Can you please include the output from: `console.log(JSON.stringify(program));` Thanks. – L0j1k Feb 22 '15 at 19:49

3 Answers3

36

The documentation isn't very clear and only shows this by example, but the syntax you have used ('-s, --src') is for boolean values.

If you want to take a string you need to say so: '-s, --src <item>'

Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
11

You aren't specifying that the options take input. You can do this by including <data> or [data] (if optional) in your option definitions:

.option('-s, --src <src>', 'src csv file') .option('-d, --dest [dest]', 'destination csv file')

L0j1k
  • 12,255
  • 7
  • 53
  • 65
8

You need to specify that the options take an argument and that they are not just a flag

program
  .version('0.0.1')
  .option('-s, --src <file>', 'src csv file')
  .option('-d, --destination <file>', 'destination csv file')
  .parse(process.argv);

If the argument is mandatory, it is specified with <>. If it is optional, with [].

xverges
  • 4,608
  • 1
  • 39
  • 60