Comment définir certaines variables d'environnement de l'intérieur package.json
à utiliser avec des npm start
commandes similaires?
Voici ce que j'ai actuellement dans mon package.json
:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
Je veux définir des variables d'environnement (comme NODE_ENV
) dans le script de démarrage tout en étant en mesure de démarrer l'application avec une seule commande, npm start
.
node.js
npm
package.json
npm-scripts
dev.meghraj
la source
la source
Réponses:
Définissez la variable d'environnement dans la commande de script:
Utilisez ensuite
process.env.NODE_ENV
dans votre application.Remarque:
env
garantit qu'il fonctionne sur toutes les plateformes. Vous pouvez l'omettre si vous ne vous souciez que de Mac / Linux.la source
set NODE_ENV=test&& mocha --reporter spec
- il n'y a pas d'espace entre le test et && exprès."test": "NODE_ENV=test mocha --reporter spec"
ne fonctionnera pas sur les systèmes Windows.env NODE_ENV=test mocha --reporter spec
utilisera la variable d'environnement déclarée de manière native multiplateforme, mais la clé est qu'elle est utilisée par npm de manière ponctuelle et ponctuelle, juste pour l'exécution du script npm. (Il n'est pas défini ou exporté pour référence future.) Tant que vous exécutez votre commande à partir du script npm, il n'y a aucun problème. En outre, le "&&" doit être supprimé lorsque vous procédez de cette manière.Utilisez simplement le package NPM cross-env . Super facile. Fonctionne sur Windows, Linux et tous les environnements. Notez que vous n'utilisez pas && pour passer à la tâche suivante. Vous venez de définir l'env puis de démarrer la tâche suivante. Crédit @mikekidder pour la suggestion dans l' un des commentaires ici.
De la documentation:
Notez que si vous souhaitez définir plusieurs variables globales, vous devez simplement les indiquer successivement, suivi de votre commande à exécuter.
En fin de compte, la commande qui est exécutée (en utilisant spawn) est:
La
NODE_ENV
variable d'environnement sera définie par cross-envla source
"test": "cross-env TS_NODE_COMPILER_OPTIONS='{\\\"module\\\":\\\"commonjs\\\"}' mocha"
env
oucross-env
? D'une part, env ne me demande pas d'installer quoi que ce soit et d'autre partcross-env
est plus populaire. Quelqu'un peut-il confirmer s'ilenv
fonctionne sur toutes les plateformes?env
ne fonctionne pas tel quel sur toutes les plateformes, d'où la raisoncross-env
d'exister. Utilisez simplementcross-env
et d'en finir.Parce que je me retrouve souvent à travailler avec plusieurs variables d'environnement, je trouve utile de les conserver dans un
.env
fichier séparé (assurez-vous de l'ignorer de votre contrôle de code source).Ajoutez ensuite
export $(cat .env | xargs) &&
avant votre commande de script.Exemple:
Pour un test, vous pouvez afficher les variables env en exécutant
npm run env
(linux) ounpm run env-windows
(windows).la source
&&
pour que cela fonctionne - Si vous avez plusieurs fichiers .env, il peut être un peu plus difficile à maintenir Votre réponse m'a inspiré pour préparer cette suggestion: stackoverflow.com/questions/25112510/…Je voulais juste ajouter mes deux cents ici pour les futurs explorateurs de nœuds. Sur mon Ubuntu 14.04,
NODE_ENV=test
cela ne fonctionnait pas, j'ai dû l'utiliserexport NODE_ENV=test
après quoi j'aiNODE_ENV=test
commencé à fonctionner aussi, bizarre.Sur Windows, comme il a été dit, vous devez utiliser,
set NODE_ENV=test
mais pour une solution multiplateforme, la bibliothèque cross-env ne semble pas faire l'affaire et avez-vous vraiment besoin d'une bibliothèque pour ce faire:Les barres verticales sont nécessaires car sinon Windows planterait sur la
export NODE_ENV
commande non reconnue : D. Je ne sais pas à propos de l'espace de fuite, mais juste pour être sûr que je les ai aussi supprimés.la source
&&
?NODE_ENV=test yadda
des moyens « runyadda
, la mise auNODE_ENV
seinyadda
. de variables d'environnementNODE_ENV=test && yadda
signifie « ensembleNODE_ENV
dans l'environnement local, mais ne pas exporter, puis exécutezyadda
».NODE_ENV=test yadda
L'approche privilégiée est.NODE_ENV=test && npm run test
ou quelque chose de similaire. J'ai fait une meilleure solution en utilisant l'process.env["NODE_ENV"] = "testing";
intérieur de mon fichier testhelper.js.&&
vous avez perdu vos variables d'environnement, la définition de variables d'environnement sans exportation fonctionne uniquement sur la commande en cours (ce qui n'est rien). pour exécuter la commande avec la variable d'env sans exporter u faire:NODE_ENV=test npm run test
. Enfin, la raison pour laquelle cela a fonctionné après avoir exporté, c'est parce que votre variable est désormais disponible (exportée) dans la session, votre NODE_ENV sans exportation ne faisait rien.Essayez ceci sous Windows en remplaçant
YOURENV
:la source
soudain, j'ai trouvé que actionhero utilise le code suivant, qui a résolu mon problème en passant simplement l'
--NODE_ENV=production
option de commande de script de démarrage.j'apprécierais vraiment d'accepter la réponse de quelqu'un d'autre qui connaît mieux la façon de définir les variables d'environnement dans package.json ou le script init ou quelque chose comme, où l'application est amorcée par quelqu'un d'autre.
la source
Pour un plus grand ensemble de variables d'environnement ou lorsque vous souhaitez les réutiliser, vous pouvez les utiliser
env-cmd
../.env
fichier:./package.json
:la source
process.env.ENV1
mongod --dbpath ~/data/db
. Je veux exécuter quelque chose commenpm mongodb
et qui obtiendra la variable d'environnement dbpath et exécutera le mondodb comme toujours ... et .. je veux le partager avec d'autres membres.Bien que je ne réponde pas directement à la question, je voudrais partager une idée en plus des autres réponses. D'après ce que j'ai obtenu, chacun d'eux offrirait un certain niveau de complexité pour atteindre l'indépendance multiplateforme.
Dans mon scénario, tout ce que je voulais, à l'origine, était de définir une variable pour contrôler la sécurisation ou non du serveur avec l'authentification JWT (à des fins de développement)
Après avoir lu les réponses, j'ai décidé de créer simplement 2 fichiers différents, avec l'authentification activée et désactivée respectivement.
Les fichiers sont simplement des wrappers qui appellent le fichier index.js d'origine (que j'ai renommé
appbootstrapper.js
):Peut-être que cela peut aider quelqu'un d'autre
la source
la source
Cela fonctionnera dans la console Windows :
npm run aaa
production:
test
Voir cette réponse pour plus de détails.
la source
set TMP=test&& npm run bbb
. L'espace avant&&
sera également lié à laNODE_ENV
chaîne"
.utilisez git bash dans les fenêtres. Git Bash traite les commandes différemment de cmd.
La plupart des invites de commande Windows s'étouffent lorsque vous définissez des variables d'environnement avec NODE_ENV = production comme ça. (L'exception est Bash sur Windows, qui utilise Bash natif.) De même, il existe une différence dans la façon dont Windows et les commandes POSIX utilisent les variables d'environnement. Avec POSIX, vous utilisez: $ ENV_VAR et sur Windows, vous utilisez% ENV_VAR%. - doc cross-env
utiliser le package dotenv pour déclarer les variables env
la source
Vous ne devez pas définir de variables ENV dans
package.json
. actionhero utiliseNODE_ENV
pour vous permettre de modifier les options de configuration qui sont chargées à partir des fichiers dans./config
. Consultez le fichier de configuration redis et voyez comment NODE_ENV est utilisé pour modifier les options de la base de données dansNODE_ENV=test
Si vous souhaitez utiliser d'autres variables ENV pour définir des choses (peut-être le port HTTP), vous n'avez toujours pas besoin de changer quoi que ce soit
package.json
. Par exemple, si vous définissezPORT=1234
dans ENV et que vous souhaitez l'utiliser comme port HTTP dansNODE_ENV=production
, faites simplement référence à cela dans le fichier de configuration correspondant, IE:la source
npm start
commande. Utilisation de l'extrait ci - dessus, si vous voulez exécuter votre serveur en utilisant le port ENV ce serait:export PORT=1234; npm start
. Vous pouvez ajouter autant de déclarations ENV que vous le souhaitez, mais elles n'appartiennent pas au fichier package.json. Si vous êtes inquiet au sujet de faire en sorte qu'ils vous existez devez utiliser par défaut dans votre fichier de configuration:port: process.env.PORT || 8080
.NODE_ENV=test npm start
ou les faire définir par le shellnpm (et yarn) transmet de nombreuses données de package.json aux scripts en tant que variables d'environnement. Utilisez
npm run env
pour les voir tous. Ceci est documenté dans https://docs.npmjs.com/misc/scripts#environment et n'est pas seulement pour les scripts "cycle de vie" commeprepublish
mais aussi pour tout script exécuté parnpm run
.Vous pouvez accéder à ces codes internes (par exemple
process.env.npm_package_config_port
dans JS) mais ils sont déjà disponibles pour le shell exécutant les scripts, vous pouvez donc également y accéder en tant que$npm_...
qu'extensions dans les "scripts" (la syntaxe Unix, pourrait ne pas fonctionner sur Windows?).La section "config" semble destinée à cet usage:
Une qualité importante de ces champs "config" est que les utilisateurs peuvent les remplacer sans modifier package.json !
Voir les documents de configuration de npm et de configuration de fil .
Il semble que le fil lit affecte
~/.npmrc
doncnpm config set
les deux, maisyarn config set
écrit~/.yarnrc
, donc seul le fil le verra :-(la source
La réponse de @ luke était presque celle dont j'avais besoin! Merci.
Comme la réponse sélectionnée est très simple (et correcte), mais ancienne, je voudrais offrir une alternative pour importer des variables à partir d'un fichier séparé .env lors de l'exécution de vos scripts et corriger certaines limitations de la réponse de Luke. Essaye ça:
::: Fichier .env :::
Ensuite, dans votre package json, vous allez créer un script qui va définir les variables et l'exécuter avant les scripts dont vous avez besoin:
::: package.json :::
Quelques observations:
L'expression régulière dans la commande grep'ed cat effacera les commentaires et les lignes vides.
Le
&&
ne pas besoin d'être « collé » ànpm run set-env
, comme il serait nécessaire si vous définissez les variables dans la même commande.Si vous utilisez du fil, un avertissement peut s'afficher, vous pouvez le remplacer par
yarn set-env
ou l'utiliser à lanpm run set-env --scripts-prepend-node-path &&
place.Environnements différents
Un autre avantage lors de son utilisation est que vous pouvez avoir différentes variables d'environnement.
la source