私はWindowsでnpmを実行していますが、実行スクリプトで並列操作を使用してスタイルを設定したいのですが、cmdで並列実行するのはpackage.jsonファイルでは面倒です
scripts: { "go": "cmd1 & cmd2"}
しかし、npmは;
を知らないcmd.exeの下でスクリプトを実行します。これをスクリプトに変更できます:{ "go": "bats/bat1.bat")
コマンドを並行して実行します。これは動作しますが、Windowsでのみ動作するスクリプトを提供します
npmでbashクローンまたはcygwinの下でスクリプトを実行できれば、config: { "Shell": "bash"}
を試しましたが、それでもcmd.exeを実行できました。
特定のシェル(cmd.exeではない)を使用してnpmに実行スクリプトを伝える方法はありますか?
Npm 5.1以降
npm config set script-Shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"
または(64bitインストール)
npm config set script-Shell "C:\\Program Files\\git\\bin\\bash.exe"
git for windows installed 。が必要なことに注意してください
npm config delete script-Shell
これを行う1つの方法を次に示します。
Package.jsonファイルに、bashを使用してスクリプトを実行する行を追加します。例えば:
"scripts": {
"boogie": "bash bin/my_script.sh"
}
これで、次の方法でnpmからbashスクリプトを実行できます。
npm run-script boogie
あまりエレガントではありませんが、機能します。
WindowsとLinux/Unixの両方で開発している場合、少なくともこのアプローチは両方の環境にかなり移植可能です。
理想的には、npm Shell configパラメーターのオーバーライドは機能するはずですが、Windowsではnpm(少なくともバージョン1.4.14)は設定を無視して、代わりにcmd.exeを使用するようです。
BashまたはGit Bashシェルで次のコマンドを使用して、シェル設定を確認します。
$ npm config ls -l | grep Shell
デフォルトでは、出力は次のようになります。
Shell = "C:\\WINDOWS\\system32\\cmd.exe"
ただし、デフォルトのシェルパラメータを上書きするには、npmrcファイルを\ Users\yourusername\AppData\Roaming\npm\etcディレクトリに追加(または編集)できます。次の行を追加するだけです。
Shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
使用するパスは、bash.exeへの任意の有効なパスにすることができます。ここで、上記の「npm config ls -l | grep Shell」コマンドを実行すると、次の出力が表示され、Shellパラメーターがオーバーライドされたことを示します。
Shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
; Shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)
いつか、おそらく、npmの新しいバージョンが、上書きされたShellパラメーターに注意を払うでしょう。
.bat
!"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"app": "cd build & browser-sync start --server --files 'index.html'",
"bat": "start start-browser.bat",
"starts": "start http://localhost:7777/datas/ && start http://localhost:7777/Info/"
},
start http://localhost:7777/datas/ && start http://localhost:7777/Info/
この目的のために特別に作成されたnode_moduleを使用します。 npm-run-all を使用することをお勧めしますが、 parallelshell などの others が存在します。
質問のドロップイン交換のParallelshellの例を以下に示します。
"scripts": {
"parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\""
},
次のコマンド:
npm run parallelexample1
windowsとUNIX(Linux/MacOS)の両方で動作します。
興味深いことに、npm-run-allはシェルコマンドをサポートしていません。したがって、すべてのシェルコマンドを以下のようなスクリプトに分ける必要があります。
"scripts": {
"parallelexample2": "npm-run-all echo*",
"echo1": "echo 1",
"echo2": "echo 2",
"echo3": "echo 3"
},
次のコマンド:
npm run parallelexample2
windowsとUNIX(Linux/MacOS)の両方で動作します。