私は、ノードの壁にぶつかってノードの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.db
とprogram.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!
オプションパラメータと 'commander'で空でないリストを受け入れる正しい方法は何ですか? Commanderを使ってオプションのパラメータを解析し、 'program.args'を手作業で解析する必要がありますか? –
私はそれを考え出しました。 –