Les versions actuelles de Windows utilisent Powershell comme shell par défaut, utilisez donc:
$env:NODE_ENV="production"
Selon la réponse de @ jsalonen ci-dessous. Si vous êtes en CMD (qui n'est plus maintenu), utilisez
set NODE_ENV=production
Cela doit être exécuté dans l'invite de commande où vous avez l'intention d'exécuter votre application Node.js.
La ligne ci-dessus définirait la variable d'environnement NODE_ENV pour l'invite de commande où vous exécutez la commande.
Pour définir les variables d'environnement globalement afin qu'elles persistent au-delà de la seule invite de commande, vous pouvez trouver l'outil dans Système dans le Panneau de configuration (ou en tapant «environnement» dans la zone de recherche du menu Démarrer).
Pour tous ceux qui luttent toujours avec ceci: set NODE_ENV=production && node app. Plus facilement configurer votre package.jsonconséquence: "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps
5
@ShuruiLiu, la commande ne produira rien, mais vous pouvez taper echo %NODE_ENV%pour vérifier sa valeur actuelle.
Jani Hartikainen
169
Attention: "set NODE_ENV = production &&" ajoute un espace de fin à la variable. J'avais besoin de "définir NODE_ENV = production &&" pour éviter l'espace supplémentaire qui casse les applications de nœuds comme Ghost.
daw
12
@Amberlamps qui n'est pas une bonne solution car le NODE_ENV est alors simplement codé en dur pour toutes les machines; le véritable objectif est de changer l'env par machine en utilisant une variable env ou de passer la valeur sur la ligne de commande, pas de la coder en dur dans le fichier package.json.
Alexander Mills,
6
Je pense que l'utilisation cross-envest la meilleure solution à ce problème si votre équipe travaille sur des systèmes d'exploitation mixtes. La réponse de @MoOx serait mon choix comme réponse à cette question.
philk
230
Je viens de trouver un joli package Node.js qui peut beaucoup aider à définir des variables d'environnement à l'aide d'une syntaxe unique, multiplateforme.
set NODE_ENV=productionn'a pas fonctionné pour moi en PowerShell mais cela a fonctionné. Merci!
rage
6
J'ai lutté un peu pour que cela fonctionne à partir de Powershell dans Visual Studio Code. J'ai pensé laisser la solution ici. J'essayais d'exécuter une commande "Gulp", tout en m'assurant que la valeur env correcte était définie. C'est ce que liquidée travail pour moi: $env:NODE_ENV="development"; gulp runMytask. Notez le point-virgule là-dedans. Le fichier gulp peut utiliser une logique conditionnelle sur process.env.NODE_ENV. À moins que vous ne le définissiez, il ne sera pas défini.
dvsoukup
2
Seule cette solution fonctionne pour moi avec Windows 10 et webpack 3.8.1
Роман Арсеньев
1
Cela fonctionne parfaitement. Mais, l' cross-env NODE_ENV=productionoption est vraiment une meilleure solution si vous exécutez des commandes npm à partir de package.json qui nécessitent la définition de l'env. Il est trop facile de laisser l'ensemble env sur dev / prod après avoir utilisé le $ env: Option NODE_ENV
Drenai
105
Il serait idéal si vous pouviez définir des paramètres sur la même ligne que votre appel pour démarrer Node.js sous Windows. Examinez attentivement ce qui suit et exécutez-le exactement comme indiqué:
Vous avez ces deux options:
Sur la ligne de commande:
set NODE_ENV=production&&npm start
ou
set NODE_ENV=production&&node index.js
L'astuce pour que cela fonctionne sous Windows est que vous devez supprimer les espaces avant et après le "&&". Configuré votre fichier package.json avec start_windows (voir ci-dessous) ci-dessous. Exécutez ensuite "npm run start_windows" sur la ligne de commande.
La DEF aimerait-elle savoir comment le faire fonctionner de cette façon?
SC_Chupacabra
2
A travaillé pour moi. J'ai dû supprimer l'espace blanc "set NODE_ENV = production && nodemon server.js"
SC_Chupacabra
2
J'aurais aimé avoir lu si loin avant d'essayer la réponse ci-dessus, cela m'aurait fait gagner du temps. : \
Jeff
1
Sur une note vaguement liée, j'ai trouvé que && ne fonctionnait pas comme prévu sur Windows lors du chaînage de plusieurs commandes. En cas de doute, essayez d'utiliser | à la place
Mike
1
cela a fonctionné pour moi sur la machine Windows 10 64 bits de cmd et power-shell
Ani
30
Vous pouvez utiliser
npm run env NODE_ENV=production
C'est probablement la meilleure façon de le faire, car il est compatible à la fois avec Windows et Unix.
Le script env est une commande intégrée spéciale qui peut être utilisée pour répertorier les variables d'environnement qui seront disponibles pour le script au moment de l'exécution. Si une commande "env" est définie dans votre package, elle aura priorité sur la commande intégrée.
Comment pouvons-nous exécuter une autre commande avec l'ensemble de variables? Cela ne semble pas fonctionner: npm run env NODE_ENV = production && echo $ NODE_ENV. Ils sont probablement exécutés dans deux obus différents?
Jonas Kello du
1
D'après ce que je peux voir, cela ne fonctionne pas du tout. À partir des documents eux-mêmes, il répertorie uniquement les variables d'environnement, pas les définit.
kumarharsh
2
Ça ne marche pas pour moi. Il répertorie les variables, affiche le var que vous spécifiez, mais à l'exécution, var n'est pas correct dans process.env.YOUR_VAR ...
MoOx
3
@JonasKello Vous utiliseriez ceci: npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'Le --est obligatoire . Remplacez node -e 'console.log(process.env.NODE_ENV)'par la commande que vous souhaitez.
Pauan
J'ai essayé avec cette commande: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jset ... rien ne s'est passé. Je ne suis pas sûr que cette méthode fonctionne sur Windows.
jcollum
14
Si vous utilisez Visual Studio avec NTVS, vous pouvez définir les variables d'environnement sur la page des propriétés du projet:
Comme vous pouvez le voir, les listes déroulantes Configuration et Plateforme sont désactivées (je n'ai pas trop cherché à comprendre pourquoi), mais si vous modifiez votre .njsprojfichier comme suit:
J'ai écrit un module win-node-env avec lequel vous pouvez exécuter votre commande comme vous le feriez dans * nix.
NODE_ENV=production node myapp/app.js
Cela fonctionne en créant un NODE_ENV.cmdqui définit laNODE_ENV variable d'environnement et génère un processus enfant avec le reste de la commande et ses arguments.
Il suffit de l'installer (globalement) et d'exécuter vos commandes de script npm, cela devrait automatiquement les faire fonctionner.
exactement ce que je cherchais! pour fonctionner avec des scripts npm, et cela fonctionne même avec d'autres outils de nœuds cli comme jest. Donc "set NODE_ENV = debug & cls & jest ..." est devenu "cls & NODE_ENV = debug jest"
Z. Khullah
9
Mon expérience avec Node.js sur Windows 7 64 bits dans Visual Studio 2013 est que vous devez utiliser
setx NODE_ENV development
à partir d'une fenêtre cmd. ET vous devez redémarrer Visual Studio pour que la nouvelle valeur soit reconnue.
La syntaxe définie ne dure que pour la durée de la fenêtre cmd dans laquelle elle est définie.
cmd- pas PowerShell? Ugh, viens aux fenêtres, rassemble-le.
jcollum
votre remarque sur le redémarrage du code VS était vraiment utile!
Yury Kozlov
8
Voici la méthode sans ligne de commande:
Sous Windows 7 ou 10, saisissez environnement dans la zone de recherche du menu Démarrer, puis sélectionnez Modifier les variables d'environnement système.
Sinon, accédez à Panneau de configuration \ Système et sécurité \ Système, puis cliquez sur Paramètres système avancés
Cela devrait ouvrir la boîte de dialogue Propriétés système avec l'onglet Avancé sélectionné. En bas, vous verrez un bouton Variables d'environnement .... Cliquez ici.
La boîte de dialogue Variables d'environnement s'ouvre.
En bas, sous Variables système, sélectionnez Nouveau ... Cela ouvrira la boîte de dialogue Nouvelle variable système.
Saisissez le nom et la valeur de la variable, puis cliquez sur OK.
Vous devrez fermer toutes les invites cmd et redémarrer votre serveur pour que la nouvelle variable soit disponible pour process.env. S'il ne s'affiche toujours pas, redémarrez votre ordinateur.
Je vous remercie! J'avais fait tout cela mais cela ne fonctionnait pas jusqu'à ce que je redémarre le serveur.
Marcel Lamothe
7
Juste pour clarifier, et pour toute autre personne qui pourrait se tirer les cheveux ...
Si vous utilisez git bash sous Windows , set node_env=production&& node whatever.jscela ne semble pas fonctionner . Utilisez plutôt la cmd native. Ensuite, en utilisantset node_env=production&& node whatever.js travaux comme prévu.
Mon cas d'utilisation:
Je développe sur Windows car mon flux de travail est beaucoup plus rapide, mais je devais m'assurer que le middleware spécifique au développement de mon application ne se déclenchait pas dans l'environnement de production.
Notez que la sortie texte de ce que fait le serveur est supprimée, et je ne suis pas sûr que ce soit réparable. (Développant la réponse de @ jsalonen.)
Votre programme échoue alors rapidement si une variable "définie" dans .env.examplen'est pas définie en tant que variable d'environnement ou dans .env.
Les fichiers .env ne sont pratiques que pour les secrets et ajoutent une étape supplémentaire de complexité lors de la configuration lors de l'affectation de nouvelles personnes à un projet ou de leur apporter des modifications.
coiso
@coiso Sans un lieu générique, commune où vous mettez beaucoup de variables d'environnement? Que ce soit dans un fichier de script ou dans un paramètre dépendant de l'IDE, vous êtes encore plus lié à des outils spécifiques. Cela rend l'intégration des nouveaux membres de l'équipe encore plus difficile, je pense.
Dominik
2
Dans le cas où vous utilisez le terminal GITBASH
"set NODE_ENV=production"
ne fonctionnera pas, que pouvez-vous faire est de taper "exportNODE_ENV=production"
cela ne définira pas de variable mais c'est utile dans de nombreux cas. Je ne recommanderai pas d'utiliser cela pour la production, mais ça devrait aller si vous jouez avec npm.
Redémarrez le code VS si le NODE_ENV ou toute autre variable d'environnement ne fournit pas la valeur correcte. Cela devrait fonctionner après le redémarrage.
Réponses:
Les versions actuelles de Windows utilisent Powershell comme shell par défaut, utilisez donc:
Selon la réponse de @ jsalonen ci-dessous. Si vous êtes en CMD (qui n'est plus maintenu), utilisez
Cela doit être exécuté dans l'invite de commande où vous avez l'intention d'exécuter votre application Node.js.
La ligne ci-dessus définirait la variable d'environnement NODE_ENV pour l'invite de commande où vous exécutez la commande.
Pour définir les variables d'environnement globalement afin qu'elles persistent au-delà de la seule invite de commande, vous pouvez trouver l'outil dans Système dans le Panneau de configuration (ou en tapant «environnement» dans la zone de recherche du menu Démarrer).
la source
set NODE_ENV=production && node app
. Plus facilement configurer votrepackage.json
conséquence:"scripts": { "start": "set NODE_ENV=production && node app" }
.echo %NODE_ENV%
pour vérifier sa valeur actuelle.cross-env
est la meilleure solution à ce problème si votre équipe travaille sur des systèmes d'exploitation mixtes. La réponse de @MoOx serait mon choix comme réponse à cette question.Je viens de trouver un joli package Node.js qui peut beaucoup aider à définir des variables d'environnement à l'aide d'une syntaxe unique, multiplateforme.
https://www.npmjs.com/package/cross-env
Cela vous permet d'écrire quelque chose comme ceci:
Ce qui est assez pratique! Plus de commandes spécifiques Windows ou Unix!
la source
Dans PowerShell:
la source
set NODE_ENV=production
n'a pas fonctionné pour moi en PowerShell mais cela a fonctionné. Merci!$env:NODE_ENV="development"; gulp runMytask
. Notez le point-virgule là-dedans. Le fichier gulp peut utiliser une logique conditionnelle sur process.env.NODE_ENV. À moins que vous ne le définissiez, il ne sera pas défini.cross-env NODE_ENV=production
option est vraiment une meilleure solution si vous exécutez des commandes npm à partir de package.json qui nécessitent la définition de l'env. Il est trop facile de laisser l'ensemble env sur dev / prod après avoir utilisé le $ env: Option NODE_ENVIl serait idéal si vous pouviez définir des paramètres sur la même ligne que votre appel pour démarrer Node.js sous Windows. Examinez attentivement ce qui suit et exécutez-le exactement comme indiqué:
Vous avez ces deux options:
Sur la ligne de commande:
ou
L'astuce pour que cela fonctionne sous Windows est que vous devez supprimer les espaces avant et après le "&&". Configuré votre fichier package.json avec start_windows (voir ci-dessous) ci-dessous. Exécutez ensuite "npm run start_windows" sur la ligne de commande.
la source
Vous pouvez utiliser
C'est probablement la meilleure façon de le faire, car il est compatible à la fois avec Windows et Unix.
Dans la documentation du script d'exécution npm :
la source
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
Le--
est obligatoire . Remplaceznode -e 'console.log(process.env.NODE_ENV)'
par la commande que vous souhaitez.npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
et ... rien ne s'est passé. Je ne suis pas sûr que cette méthode fonctionne sur Windows.Si vous utilisez Visual Studio avec NTVS, vous pouvez définir les variables d'environnement sur la page des propriétés du projet:
Comme vous pouvez le voir, les listes déroulantes Configuration et Plateforme sont désactivées (je n'ai pas trop cherché à comprendre pourquoi), mais si vous modifiez votre
.njsproj
fichier comme suit:La liste déroulante 'Debug / Release' contrôlera ensuite la façon dont la variable est définie avant de démarrer Node.js.
la source
J'ai écrit un module win-node-env avec lequel vous pouvez exécuter votre commande comme vous le feriez dans * nix.
Cela fonctionne en créant un
NODE_ENV.cmd
qui définit laNODE_ENV
variable d'environnement et génère un processus enfant avec le reste de la commande et ses arguments.Il suffit de l'installer (globalement) et d'exécuter vos commandes de script npm, cela devrait automatiquement les faire fonctionner.
la source
Mon expérience avec Node.js sur Windows 7 64 bits dans Visual Studio 2013 est que vous devez utiliser
à partir d'une fenêtre cmd. ET vous devez redémarrer Visual Studio pour que la nouvelle valeur soit reconnue.
La syntaxe définie ne dure que pour la durée de la fenêtre cmd dans laquelle elle est définie.
Test simple dans Node.js:
Il renvoie «non défini» lors de l'utilisation de set, et il retournera «développement» si vous utilisez setx et redémarrez Visual Studio.
la source
cmd
- pas PowerShell? Ugh, viens aux fenêtres, rassemble-le.Voici la méthode sans ligne de commande:
Sous Windows 7 ou 10, saisissez environnement dans la zone de recherche du menu Démarrer, puis sélectionnez Modifier les variables d'environnement système.
Sinon, accédez à Panneau de configuration \ Système et sécurité \ Système, puis cliquez sur Paramètres système avancés
Cela devrait ouvrir la boîte de dialogue Propriétés système avec l'onglet Avancé sélectionné. En bas, vous verrez un bouton Variables d'environnement .... Cliquez ici.
La boîte de dialogue Variables d'environnement s'ouvre.
En bas, sous Variables système, sélectionnez Nouveau ... Cela ouvrira la boîte de dialogue Nouvelle variable système.
Saisissez le nom et la valeur de la variable, puis cliquez sur OK.
Vous devrez fermer toutes les invites cmd et redémarrer votre serveur pour que la nouvelle variable soit disponible pour process.env. S'il ne s'affiche toujours pas, redémarrez votre ordinateur.
la source
Juste pour clarifier, et pour toute autre personne qui pourrait se tirer les cheveux ...
Si vous utilisez git bash sous Windows ,
set node_env=production&& node whatever.js
cela ne semble pas fonctionner . Utilisez plutôt la cmd native. Ensuite, en utilisantset node_env=production&& node whatever.js
travaux comme prévu.Mon cas d'utilisation:
Je développe sur Windows car mon flux de travail est beaucoup plus rapide, mais je devais m'assurer que le middleware spécifique au développement de mon application ne se déclenchait pas dans l'environnement de production.
la source
Pour exécuter votre application dans PowerShell (depuis
&&
n'est pas autorisé):Notez que la sortie texte de ce que fait le serveur est supprimée, et je ne suis pas sûr que ce soit réparable. (Développant la réponse de @ jsalonen.)
la source
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
premier du type PowerShell
puis tapez
Il fonctionnera parfaitement en affichant toutes les sorties.
la source
Pour plusieurs variables d'environnement, un
.env
fichier est plus pratique:Il est facile à utiliser avec
dotenv-safe
:npm install --save dotenv-safe
.index.js
) et utilisez-le directement avec laprocess.env
commande :N'oubliez pas d' ignorer le
.env
fichier dans votre VCS .Votre programme échoue alors rapidement si une variable "définie" dans
.env.example
n'est pas définie en tant que variable d'environnement ou dans.env
.la source
Dans le cas où vous utilisez le terminal GITBASH
"set NODE_ENV=production"
ne fonctionnera pas, que pouvez-vous faire est de taper "exportNODE_ENV=production"
la source
cela ne définira pas de variable mais c'est utile dans de nombreux cas. Je ne recommanderai pas d'utiliser cela pour la production, mais ça devrait aller si vous jouez avec npm.
la source
J'ai utilisé le script npm pour exécuter une tâche gulp sans "&&"
NODE_ENV = testcases npm run seed-db
la source
Redémarrez le code VS si le NODE_ENV ou toute autre variable d'environnement ne fournit pas la valeur correcte. Cela devrait fonctionner après le redémarrage.
la source