Un package Node pour gérer les variables d'environnement sous Windows/Mac/Linux
Si vous avez des problèmes pour uniformiser la gestion des variables d’environnement dans vos commandes, il y a une solution !
Article publié le 22/07/2021, dernière mise à jour le 19/09/2023
Si vous contribuez à un projet dans lequel les développeurs et développeuses travaillent sur des OS différents, vous avez sûrement pu rencontrer des problèmes de gestion de variables d'environnement.
Mais pourquoi ne pas simplement utiliser un package comme dotenv par exemple ?
Parce que ce n'est pas toujours possible ! Par exemple lorsque vous appelez un outil de build (type webpack) et que vous devez lui passer une variable d'environnement, vous n'allez pas changer le code de l'outil pour inclure dotenv.
Voilà l'outil qui va suivre peut s'avérer très pratique, surtout pour les devs qui travaillent sous Windows et dont la syntaxe pour les variables d'environnement change entre cmd et Powershell...
cross-env
Voici un paquet NodeJS qui va vous permettre de régler ce problème, et son utilisation est très simple :
$ npm install cross-env --save
Ensuite, il vous suffira d'invoquer cross-env, d'initialiser toutes les variables d'environnement que vous désirez et d'appeler le reste de votre commande classique. Exemple :
$ cross-env NODE_ENV=production node index.js
Vous aurez remarqué qu'on ne chaîne pas les commandes ici (comme avec &&), car c'est en réalité cross-env qui va "internaliser" l'exécution de votre commande en créant un nouveau processus avec spawn.
Un article sur le fonctionnement de spawn est disponible sur le blog pour ceux que cela intéresse !
Si vous avez besoin de lancer une commande composée de plusieurs sous-commandes ou bien d'utiliser directement la valeur de vos variables d'environnement (à l'extérieur de Node), vous devrez utiliser cross-env-shell à la place :
$ cross-env-shell NODE_ENV=production "node index.js && echo $NODE_ENV"
Si vous cherchez plus d'informations, je vous invite à regarder la documentation directement sur NPM : https://www.npmjs.com/package/cross-env
Aucun commentaire pour l'instant