scripts
私の部分は現在package.json
次のようになっています:
"scripts": {
"start": "node ./script.js server"
}
...つまり、実行してnpm start
サーバーを起動できるということです。ここまでは順調です。
npm start 8080
しかし、次のようなものを実行して引数を渡すことができるようにしたいと思いますscript.js
(例: npm start 8080
=> node ./script.js server 8080
)。 これは可能ですか?
ベストアンサー1
npm 2以降
可能です引数を渡すnpm run
npm 2 (2014) 以降。構文は次のとおりです。
npm run <command> [-- <args>]
--
コマンド自体に渡されるパラメータnpm
とスクリプトに渡されるパラメータを区切るために使用されるセパレータに注意してください。(これは、さまざまなコマンドライン ツールで使用される一般的な規則です)。
例package.json
:
"scripts": {
"grunt": "grunt",
"server": "node server.js"
}
これらのスクリプトにパラメータを渡す方法は次のとおりです。
npm run grunt -- task:target // invokes `grunt task:target`
npm run server -- --port=1337 // invokes `node server.js --port=1337`
注:パラメータが-
またはで始まらない場合は--
、明示的な--
区切り文字を使用する必要はありませんが、わかりやすくするために区切り文字を使用することをお勧めします。
npm run grunt task:target // invokes `grunt task:target`
以下の動作の違いに注意してください (test.js
にはあります):またはconsole.log(process.argv)
で始まるパラメータはスクリプト ではなく に渡され、そこで暗黙的に取り込まれます。-
--
npm
$ npm run test foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', 'foobar']
$ npm run test -foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js']
$ npm run test --foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js']
$ npm run test -- foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', 'foobar']
$ npm run test -- -foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', '-foobar']
$ npm run test -- --foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', '--foobar']
npm で実際に使用されるパラメータを使用すると、違いはより明確になります。
$ npm test --help // this is disguised `npm --help test`
npm test [-- <args>]
aliases: tst, t
パラメータ値を取得するには、この質問を見る名前付きパラメータの読み取りには、次のような解析ライブラリを使用するのがおそらく最適です。ヤルグスまたはミニマリスト; nodejs はprocess.argv
コマンドラインパラメータ値を含むものをグローバルに公開しますが、これは低レベルの API (オペレーティングシステムによってノード実行ファイルに提供される、空白で区切られた文字列の配列) です。