Windowsでnpmrun-scriptsのシェルを設定する方法


82

私はWindowsでnpmを実行していて、run-scriptsで並列操作を使用してスタイルを設定したいのですが、cmdで並列実行するのは、書きたいpackage.jsonファイルでちょっと面倒です-

scripts: { "go": "cmd1 & cmd2"} 

しかし、npmはcmd.exeの下でスクリプトを実行しますが、; これをスクリプトに変更できるかどうかはわかりません{ "go": "bats/bat1.bat")。bat1.batは、Windowsスタイルの呼び出しまたは開始コマンドを使用してコマンドを並行して実行するcmdbatファイルです。これは機能しますが、Windowsでのみ機能するスクリプトを提供します。

npmにbashクローンまたはcygwinでスクリプトを実行させることができれば、はるかに簡単になります。

試しました config: { "shell": "bash"} が、それでもcmd.exeが実行されました

特定のシェル(cmd.exeではない)を使用してスクリプトを実行するようにnpmに指示する方法はありますか?


package.jsonでシェルを指定することは[まだ]不可能ですか?Windowsとbashスクリプトの両方にnpmを使用していますが、特定のpackage.jsonのデフォルトの「シェル」または「スクリプトシェル」設定を上書きする方法がありませんか?
CoreyAlix19年

回答:


153

npm5.1以降

npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"  

または(64ビットインストール)

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

Windows用のgitをインストールする必要があることに注意してください。

次のコマンドを実行して元に戻すことができます。

npm config delete script-shell

8
これは受け入れられた答えでなければなりません!GitBashを搭載したWindows10で動作します(VSコードが含まれています)。
Alex Vang 2017年

7
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"これは、Windows 1064ビットで並列スクリプトを実行する際のすべての問題に対する答えです。@DuncanSungWKim감사합니다このために。
TaeKwonJ​​oe

おかげで、私はcmdで機能していたがbashでは機能しなかったnpm startに問題があり、あなたが提案したスクリプトを実行しました、そしてそれは機能しました!!!! 答えを求めてグーゲルを2日間行った後....
_-

2
すでにgitbashシェルを使用していてnpm run <script、この構成で実行している場合、スクリプトを実行して新しいgitbashウィンドウが生成されます。これは私が望むものではありません。呼び出し元のシェル内でシェルを単純に呼び出す方法はありますか?
JHH

2
@ JHH-bash.exeの代わりにgit-bash.exeを使用していたため、vscodeからシェルを開くこともできました。vscode bashがスクリプトシェルbashと同じになるように修正すると、問題は解決しました。
コーリーアリックス

28

これを行う1つの方法は次のとおりです。

  1. プロジェクトのbinディレクトリにmy_script.shなどのスクリプトを作成します。
  2. package.jsonファイルに、bashを使用してスクリプトを実行する行を追加します。例えば:

    "scripts": {
      "boogie": "bash bin/my_script.sh"
    }
    

これで、次の方法でnpmからbashスクリプトを実行できます。

    npm run-script boogie

あまりエレガントではありませんが、機能します。

WindowsとLinux / Unixの両方で開発している場合、少なくともこのアプローチは両方の環境にかなり移植可能です。


3
別のオプション: "scripts": { "start": "node ./bin/www", "bash": "bash -c", "ls": "npm run bash ls" }
cchamberlain 2015年

16

理想的には、npmシェル構成パラメーターのオーバーライドが機能するはずですが、Windowsではnpm(少なくともバージョン1.4.14)は設定を無視し、代わりにcmd.exeを使用するようです。

bashまたはGitBashシェルで次のコマンドを使用して、シェル設定を確認します。

$ 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 = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)

ある日、おそらく、npmの新しいバージョンがオーバーライドされたシェルパラメータに注意を払うでしょう。


1
これがうまくいったらいいのに。COMSPEC環境変数を変更しましたが、そこからプルしているように見えますが、正しく機能させることができませんでした。
cchamberlain 2015年

4
これは同じ仕事をします:$ npm config set shell "C:\\msys64\\usr\\bin\\bash"
kwarnke 2017年

私はあなたの提案に従って私の問題を解決しました。これで、npmでスクリプトを実行できるようになりました。このスクリプトには;、WindowsではC:\ Users \ username \で区切られたコマンドが含まれてい.npmrcます。ファイルを追加しましたshell = "C:\\Program Files\\Git\\bin\\bash.exe" script-shell = "C:\\Program Files\\Git\\bin\\bash.exe"
iFederx

2

CMDの実行方法を使用するだけ.batです!

.json
"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/

1

この目的のために特別に作成されたnode_moduleを使用します。私が使用することをお勧めNPM-実行すべてを、しかし、他の人はのような、存在parallelshell

質問のドロップイン置換の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)の両方で動作します。


NPM-実行すべてのためのヒントのためのおかげで、私が試した--parallelもオプション
ブランドンセーレンCulley

1

私の場合、npm startBashの中から実行する必要がありました。実行してからcmd、を実行してbashを開き"c:\Program Files\Git\bin\bash.exe"ます。その後、bashシェルの下で、電話をかけることができnpm buildnpm start成功しました。

Gitを使用している場合は、すでにbashを使用している可能性があります。そうでない場合は、インストールできます。

これが誰かの時間を節約するかもしれないことを願っています。


Linuxで動作するすべてのスクリプトで動作するわけではありません。たとえば、次のようになりますPORT=8000
shinzou

0

npmスクリプトには、クロスプラットフォームのPowerShellhttps ://github.com/powershell/powershell#get-powershellを使用することもできます

単一のプロジェクトに設定するには、プロジェクトのルートフォルダーからこれを実行します。

npm config set script-shell pwsh --userconfig ./.npmrc

すべてのノードプロジェクトにグローバルに設定するには:

npm config set script-shell pwsh [--global]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.