2017-10-30 11 views
0

私は、ノードの壁にぶつかってノードのcommanderモジュールに引数を解析してもらいたいと思っています。Node.jsコマンドラインで任意の+可変引数を使用する

私は名前付きデータベースにファイルのリストをアップロードしようとしています。デフォルトのデータベース名があるので、にはにデータベースパラメータを含める必要はありません。

私は次のように動作するには、このコマンドが欲しい:

>>> ./upload.js --db ReallyCoolDB /files/uploadMe1.txt /files/uploadMe2.txt 
(uploads "uploadMe1.txt" and "uploadMe2.txt" to database "ReallyCoolDB") 

>>> ./upload.js /files/uploadMe1.txt /files/uploadMe2.txt 
(uploads "uploadMe1.txt" and "uploadMe2.txt" to the default database) 

>>> ./upload.js --db ReallyCoolDB 
(returns an error; no files provided) 

どのように私はcommanderでこれを実装することができますか?私は現在、私は動作しません。これは、このコードでこだわっている、すでに多くのことを試してみた:

// upload.js: 

#!/usr/bin/env node 

var program = require('commander'); 
program 
    .version('0.1.0') 
    .description('Upload files to a database') 
    .command('<path1> [morePaths...]') 
    .option('-d, --db [dbName]', 'Optional name of db', null) 
    .action(function(path1, morePaths) { 

    // At this point I simply want: 
    // 1) a String "dbName" var 
    // 2) an Array "paths" containing all the paths the user provided 
    var dbName = program.db || getDefaultDBName(); 
    var paths = [ path1 ].concat(morePaths || []); 
    console.log(dbName, paths); 

    // ... do the upload ... 

    }) 
    .parse(process.argv); 

私は./upload.jsを実行しようとすると、私は何も出力を得ることはありません!

コマンダーを使用して、単一のオプションのパラメーターと空でないストリングのリストを受け入れる方法はありますか?

編集:Rob Raischのおかげで、私の問題は解決しました。溶液は、usage代わりにactionを使用(action関数内の代わりに)programコマンドの後にすべての作業を行う、program.dbprogram.argsで動作し、手動program.argsが非空であることを保証することである。

var program = require('commander'); 

program 
    .version('0.1.0') 
    .description('Upload files to a database') 
    .usage('[options] <path1> [morePaths ...]') // This improves "--help" output 
    .option('-d, --db [dbName]', 'Optional name of db', null) 
    .parse(process.argv); 

var dbName = program.db || getDefaultDBName(); 
var paths = program.args; 

if (!paths.length) { 
    console.log('Need to provide at least one path.'); 
    process.exit(1); 
} 

// Do the upload! 

答えて

1

コマンドライン処理モジュールのファイルは、2番目の段落でユースケースに応答します。

"コマンドのオプションは、オプションのドキュメントとしても機能する.option()メソッドで定義されています。 procのオプションess.argv 残っているargsをprogram.argsの配列で残しておき、オプションによって消費されていない配列。 "

+0

オプションパラメータと 'commander'で空でないリストを受け入れる正しい方法は何ですか? Commanderを使ってオプションのパラメータを解析し、 'program.args'を手作業で解析する必要がありますか? –

+0

私はそれを考え出しました。 –

関連する問題