web-dev-qa-db-fra.com

comment configurer Shell pour les scripts d'exécution npm dans Windows

J'exécute npm sur Windows et j'aimerais utiliser le style & les opérations parallèles dans les scripts d'exécution Mais s'exécuter en parallèle dans cmd est un peu compliqué. Dans mon fichier package.json, j'aimerais écrire- 

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

mais npm exécute le script sous cmd.exe qui n'est pas connu; Je pourrais changer ceci en Scripts: {"go": "bats/bat1.bat") où bat1.bat est un fichier bat cmd qui utilise l'appel de style Windows ou les commandes de démarrage pour exécuter des commandes en parallèle. qui fonctionne mais me donne un script qui ne fonctionne que sur les fenêtres

ce serait beaucoup plus simple si je pouvais obtenir que npm exécute le script sous un clone bash ou cygwin J'ai essayé config: {"Shell": "bash"}

y a-t-il un moyen de dire à npm d'exécuter des scripts en utilisant un shell spécifique (pas cmd.exe)?

38
user2129444

Depuis npm 5.1

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

ou (installation 64 bits)

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

Notez que vous devez avoir installé git pour Windows .

Vous pouvez le retourner en lançant:

npm config delete script-Shell
56
DuncanSungWKim

Voici une façon de le faire:

  1. Créez un script, tel que my_script.sh, dans le répertoire bin de votre projet.
  2. Dans votre fichier package.json, ajoutez une ligne pour exécuter le script à l'aide de bash. Par exemple:

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

Vous pouvez maintenant exécuter votre script bash à partir de npm en:

    npm run-script boogie

Pas très élégant, mais ça marche.

Si vous développez sous Windows et Linux/Unix, cette approche est au moins assez portable pour les deux environnements.

22
Craig Johannsen

Idéalement, le remplacement du paramètre de configuration du shell npm devrait fonctionner, mais npm (au moins la version 1.4.14) semble sous Windows ignorer le paramètre et utiliser cmd.exe à la place.

Utilisez la commande suivante dans votre bash ou votre shell Git Bash pour connaître le paramètre du shell:

$ npm config ls -l | grep Shell

Par défaut, le résultat sera:

Shell = "C:\\WINDOWS\\system32\\cmd.exe"

Toutefois, pour remplacer le paramètre Shell par défaut, vous pouvez ajouter (ou modifier) ​​un fichier npmrc au répertoire\Users\votrenomutilisateur\AppData\Roaming\npm\etc. Ajoutez simplement la ligne suivante:

Shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"

Le chemin que vous utilisez peut être n'importe quel chemin valide vers bash.exe. Maintenant, si vous exécutez la commande "npm config ls -l | grep Shell" ci-dessus, vous verrez la sortie suivante, indiquant que le paramètre Shell a été remplacé:

Shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
; Shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)

Un jour, peut-être, une nouvelle version de npm s'intéressera-t-elle au paramètre Shell remplacé.

13
Craig Johannsen

juste en utilisant la méthode de CMD pour exécuter .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/
1
user8202629

Utilisez un node_module spécialement créé à cet effet. Je suggère d'utiliser npm-run-all , mais autres existe, tel que parallelshell .

L'exemple de Parallelshell est ci-dessous pour un remplacement immédiat de votre question.

"scripts": {
    "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\""
},

commande suivante:

npm run parallelexample1

fonctionne aussi bien sur Windows que sur Unix (Linux/MacOS).

Fait intéressant, npm-run-all ne prend pas en charge les commandes Shell; par conséquent, nous devons mettre toutes les commandes Shell dans des scripts distincts, comme ci-dessous. 

"scripts": {
   "parallelexample2": "npm-run-all echo*",
    "echo1": "echo 1",
    "echo2": "echo 2",
    "echo3": "echo 3"
},

Commande suivante: 

npm run parallelexample2

fonctionne aussi bien sur Windows que sur Unix (Linux/MacOS).

1
Atilla Ozgur