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.
Vous avez quelques options:
env
pour chaque commande séparémentpoststart
, vous pouvez concaténer des commandes pour npm comme suit: "start": "NODE_ENV=${NODE_ENV:=production} node start-app.js && echo $NODE_ENV"
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)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