Package.jsonに以下のスクリプトがあります。
"scripts": {
"vumper": "node node_modules/vumper/index.js",
"format": "prettier --single-quote -width=80 --write package.json"
},
「vumper」パッケージは、コマンドライン引数(「dv」など)を受け取ります。私ができることは、これらの両方を連続して実行するコマンドを使用することです。
本質的に、私は実行できるようにしたい:
npm run vumber dv
その後
npm run format
しかし、1つのコマンドで、次のようなもの
npm run my-build dv
上記の両方のコマンドを実行し、コマンドライン引数「dv」を正しく受け入れて、最初のnpm run vumperに渡します。これは可能ですか?
基本的に、あなたが望んでいるのは、npm-scriptを次のようにすることです。これにより、CLIを介して_<arg-here>
_が提供されます。
_...
"scripts": {
"my-build": "npm run vumper <arg-here> && npm run format",
...
},
...
_
ただし、残念ながら、npmにはこれを実現するための組み込み機能がありません。
特別なnpmオプション_--
_(Solution 1の最後を参照してください)引数をスクリプトの[〜#〜] end [〜#〜]に渡しますが、MIDDLEには渡しません。したがって、2つのコマンドが反対の場合次のように、_--
_オプションを使用できます。
_...
"scripts": {
"my-build": "npm run format && npm run vumper --",
...
},
...
_
スクリプトのMIDDLEに引数を渡す組み込み機能がないという制限を克服するには、次の解決策を検討してください。
Bashのみのソリューションについては、「ソリューション1」セクションを参照してください。
クロスプラットフォームサポートが必要な場合は、「ソリューション2」セクションで説明されているソリューションに従ってください。
以下に示すように、package.jsonのscripts
セクションで_my-build
_スクリプトを構成して、Bash Shell function を呼び出します:
package.json
_...
"scripts": {
"my-build": "func() { npm run vumper \"$1\" && npm run format; }; func",
"vumper": "node node_modules/vumper/index.js",
"format": "prettier --single-quote -width=80 --write package.json"
},
...
_
説明:
func
という名前のBash関数は次のことを行います。
npm run vumper <arg>
_を実行します。これにより、_<arg>
_は、CLIを介して渡されるシェル引数になります。スクリプトでは、_$1
_(つまり、最初の 位置パラメータ /引数)を使用して参照されます。npm run format
_を介してformat
という名前のスクリプトを実行します。これらの2つの_npm run
_コマンドは_&&
_演算子を使用してチェーンされているため、2番目の_npm run format
_コマンドは、最初の_npm run vumper <arg>
_コマンドが正常に完了した場合(つまり、_0
_終了コード)。
_my-build
_スクリプトの実行:
CLIから_my-build
_を呼び出すには、次を実行する必要があります。
_npm run my-build -- dv
_
注意:
この場合、末尾のdv
部分は、vumper
スクリプトに渡される引数です。
引数の前に特別なオプション_--
_を指定する必要があります。 docs は、_--
_オプションを次のように説明します。
...特別なオプション_
--
_は、オプションの終わりを区切るためにgetopt
によって使用されます。 npmは、_--
_の後のすべての引数をスクリプトに直接渡します。..引数は、_npm run
_の後に指定されたスクリプトにのみ渡され、プリまたはポストスクリプトには渡されません。
クロスプラットフォームソリューション(Bash、Windowsコマンドプロンプト/cmd.exe、PowerShellなどで正常に動作するソリューション)の場合、nodejsヘルパースクリプトを次のように利用する必要があります。
run.js
Nodejsスクリプトに名前run.jsを付け、package.jsonと同じレベルでプロジェクトのルートディレクトリに保存します。
_const execSync = require('child_process').execSync;
const arg = process.argv[2] || 'dv'; // Default value `dv` if no args provided via CLI.
execSync('npm run vumper ' + arg, {stdio:[0, 1, 2]});
execSync('npm run format', {stdio:[0, 1, 2]});
_
package.json
_my-build
_スクリプトを設定して、次のようにrun.jsを呼び出します。
_...
"scripts": {
"my-build": "node run",
"vumper": "node node_modules/vumper/index.js",
"format": "prettier --single-quote -width=80 --write package.json"
},
...
_
_my-build
_スクリプトの実行:
ソリューション1に従って、CLIから_my-build
_を呼び出すには、次を実行する必要があります
_npm run my-build -- dv
_
説明:
run.jsは _process.argv
_ を使用して、CLIを介して渡された引数を取得します(例:dv
)。 _npm run my-build
_の実行時に引数が指定されていない場合、デフォルト値(つまりdv
)がvumper
npm-scriptに渡されます。
run.jsも利用します child_process.execSync(...)
toShell-out/ invoke 2つの_npm run
_コマンド。
同時に使用できると思います。
https://www.npmjs.com/package/concurrently
最初に同時にインストールしてから、次のように使用する必要があります。
引数を指定して複数のコマンドを実行できます
だからあなたの場合、それは
concurrently "npm:vumber dv" "npm:format"