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)?
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 .
npm config delete script-Shell
Voici une façon de le faire:
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.
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é.
.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/
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).