web-dev-qa-db-fra.com

Passage de variables d'environnement dans npm-scripts

J'ai un package.json avec le contenu suivant (simplifié) dans la clé de script:

...
scripts: {
   "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js",
   "poststart": "echo $NODE_ENV"
}
...

À partir de la ligne de commande, je peux exécuter:

npm start

Cela va exécuter mon script start-app.js et définir la variable d’environnement process.env.NODE_ENV sur "production". Voir ici pour l'explication de la syntaxe.

Le post-démarrage s’exécutera automatiquement après le démarrage comme décrit ici .

Toutefois, poststart n'héritera pas de la variable d'environnement NODE_ENV Shell, de sorte que la commande echo n'effectuera aucun écho.

Mon code de production est un peu plus complexe, mais ce que je cherche à faire est de transmettre la variable NODE_ENV du "point de départ" aux scripts dépendants. Des suggestions/meilleures pratiques sur la façon de le faire?

Je ne veux pas coder en dur le NODE_ENV dans le post-démarrage, parce que je pourrais vouloir faire:

NODE_ENV=development npm start

et je veux que tout "en bas de la chaîne" hérite du même environnement.

33
Hans

Vous avez quelques options:

  • better-npm-run , qui peut définir un env pour chaque commande séparément
  • Au lieu d’un script poststart, vous pouvez concaténer des commandes pour npm comme suit: "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"
  • Utilisez un gestionnaire de processus en production tel que pm2 . pm2 vous permet de définir des fichiers JSON spécifiques à l'environnement avec des paramètres tels que NODE_ENV. Dans notre société, nous exécutons avec succès toutes nos applications dans différents environnements avec pm2 (tout en ayant la même commande de démarrage)
16
Mario Tacke

voici comment je l'ai fait, vous devez d'abord installer deux dépendances de développement

https://www.npmjs.com/package/env-cmd this charge votre variable d'env de votre fichier

https://www.npmjs.com/package/cross-env cette variable d'environnement d'utilisation dans le script

exemples de scripts:

"env-cmd ./.config/prod.env cross-env-Shell \"docker volume create $DOCKER_VOLUME\""

cette charge $ DOCKER_VOLUME env var de prod.env

3
tylim