Exécuter des scripts qui définissent et utilisent des variables d'environnement sur les plates-formes
AVIS: Cross-INV fonctionne toujours bien, mais est en mode de maintenance. Aucune nouvelle fonctionnalité ne sera ajoutée, seuls les bogues sérieux et les cas communs ne seront corrigés et ne seront mis à jour qu'avec Node.js au fil du temps. Apprendre encore plus
La plupart des invites de commande Windows s'étoufferont lorsque vous définissez des variables d'environnement avec NODE_ENV=production comme celle-là. (L'exception est Bash sur Windows, qui utilise un bash natif.) De même, il y a une différence dans la façon dont les commandes Windows et POSIX utilisent des variables d'environnement. Avec POSIX, vous utilisez: $ENV_VAR et sur Windows, vous utilisez %ENV_VAR% .
cross-env fait en sorte que vous puissiez avoir une seule commande sans vous soucier de définir ou d'utiliser correctement la variable d'environnement pour la plate-forme. Réglez-le comme vous le feriez s'il fonctionne sur un système POSIX, et cross-env s'occupera de le régler correctement.
cross-env vs cross-env-shell Ce module est distribué via le NPM qui est regroupé de nœud et doit être installé comme l'un des devDependencies de votre projet:
npm install --save-dev cross-env
AVERTISSEMENT! Assurez-vous que lorsque vous installez des packages, vous épelez correctement les choses pour éviter d'installer par erreur les logiciels malveillants
Remarque: la version 7 de Cross-INV prend uniquement en charge Node.js 10 et plus, pour l'utiliser sur Node.js 8 ou inférieur Installation de la version 6
npm install --save-dev cross-env@6
Je l'utilise dans mes scripts NPM:
{
"scripts" : {
"build" : " cross-env NODE_ENV=production webpack --config build/webpack.config.js "
}
} En fin de compte, la commande qui est exécutée (en utilisant cross-spawn ) est:
webpack --config build/webpack.config.js
La variable d'environnement NODE_ENV sera définie par cross-env
Vous pouvez définir plusieurs variables d'environnement à la fois:
{
"scripts" : {
"build" : " cross-env FIRST_ENV=one SECOND_ENV=two node ./my-program "
}
}Vous pouvez également diviser une commande en plusieurs, ou séparer la déclaration des variables d'environnement de l'exécution de la commande réelle. Vous pouvez le faire de cette façon:
{
"scripts" : {
"parentScript" : " cross-env GREET= " Joe " npm run childScript " ,
"childScript" : " cross-env-shell " echo Hello $GREET " "
}
} Où childScript détient la commande réelle à exécuter et parentScript définit les variables d'environnement à utiliser. Ensuite, au lieu d'exécuter le script enfant, vous exécutez le parent. Ceci est très utile pour lancer la même commande avec différentes variables Env ou lorsque les variables d'environnement sont trop longues pour tout avoir en une seule ligne. Cela signifie également que vous pouvez utiliser la syntaxe $GREET Env Var même sur Windows, ce qui le nécessiterait généralement pour être %GREET% .
Si vous précédez un signe en dollars avec un nombre impair de barreaux de barreaux, l'instruction d'expression ne sera pas remplacée. Notez que cela signifie des barres réformées après que l'échappement de la chaîne JSON a eu lieu. "FOO=\$BAR" ne sera pas remplacé. "FOO=\\$BAR" sera remplacé cependant.
Enfin, si vous souhaitez passer une chaîne JSON (par exemple, lorsque vous utilisez TS-chargedeur), vous pouvez faire comme suit:
{
"scripts" : {
"test" : " cross-env TS_NODE_COMPILER_OPTIONS={ \" module \" : \" commonjs \" } node some_file.test.ts "
}
} Portez une attention particulière à la triple barre arrière (\) avant les doubles devis (") et l' absence de devis simples (') . Ces deux conditions doivent être remplies afin de travailler à la fois sur Windows et Unix.
cross-env vs cross-env-shell Le module cross-env expose deux bacs: cross-env et cross-env-shell . Le premier exécute des commandes à l'aide de cross-spawn , tandis que la seconde utilise l'option shell à partir de spawn du Node.
Le principal cas d'utilisation pour cross-env-shell est lorsque vous avez besoin d'une variable d'environnement pour être définie sur un script de shell en ligne entier, plutôt qu'une seule commande.
Par exemple, si vous souhaitez que la variable d'environnement s'applique à plusieurs commandes en série, vous devrez envelopper celles en guillemets et utiliser cross-env-shell au lieu de cross-env .
{
"scripts" : {
"greet" : " cross-env-shell GREETING=Hi NAME=Joe " echo $GREETING && echo $NAME " "
}
} La règle de base est: si vous voulez passer pour cross-env une commande qui contient des caractères de coquille spéciaux que vous souhaitez interpréter , utilisez cross-env-shell . Sinon, s'en tenir à cross-env .
Sous les fenêtres, vous devez utiliser cross-env-shell , si vous souhaitez gérer les événements de signal à l'intérieur de votre programme. Un cas courant pour cela est lorsque vous souhaitez capturer un événement SIGINT invoqué en appuyant sur Ctrl + C sur l'interface de ligne de commande.
Veuillez noter que npm utilise cmd par défaut et cela ne prend pas en charge la substitution de commandes, donc si vous souhaitez en tirer parti, vous devez mettre à jour votre .npmrc pour définir la script-shell sur PowerShell. Apprenez-en plus ici.
J'ai créé ceci à l'origine pour résoudre un problème que j'avais avec mes scripts NPM en forme angulaire. Cela a rendu la contribution au projet beaucoup plus facile pour les utilisateurs de Windows.
env-cmd - lit les variables d'environnement à partir d'un fichier à la place@naholyr/cross-env - cross-env avec support pour définir les valeurs par défaut Vous cherchez à contribuer? Recherchez le bon étiquette de premier numéro.
Veuillez déposer un problème pour les bogues, la documentation manquante ou un comportement inattendu.
Voir les bogues
Ce projet est en mode de maintenance et aucune nouvelle demande de fonctionnalité ne sera prise en compte.
Apprendre encore plus
Merci à ces gens (clé emoji):
Kent C. Dodds ? | Ya Zhuang ? | James Harris | compumike08 ? | Daniel Rodríguez Rivero ? | Jonas Keinholz ? | Hugo Wood ? |
Thiebaud Thomas ? | Daniel Rey López | Amila Welihinda ? | Paul Betts ? | Turner Hayes ? | Suhas Karanth | Sven |
D. Nicolás Lopez Zelaya | Johan Hernandez | Jordan Nielson ? | Jason Cooke | Bibo5088 | Eric Berry ? | Michaël de Boey |
Lauri Eskola | dévoué | Daniel |
Ce projet suit les spécifications de tous les contributeurs. Contributions de toute nature bienvenue!
Remarque: Cela a été ajouté tardif dans le projet. Si vous avez contribué à ce projet de quelque manière que ce soit, veuillez faire une demande de traction pour vous ajouter à la liste en suivant les instructions dans le
CONTRIBUTING.md
Mit