web-dev-qa-db-fra.com

Comment définir NODE_ENV = production sous Windows?

Dans Ubuntu, c'est assez simple. Je peux exécuter l'application en utilisant:

$ NODE_ENV=production node myapp/app.js

Cependant, cela ne fonctionne pas sous Windows. Existe-t-il un fichier de configuration dans lequel je peux définir l'attribut?

260
Jack

Les versions actuelles de Windows utilisent Powershell comme shell par défaut, utilisez donc:

$env:NODE_ENV="production"

La réponse de @ jsalonen ci-dessous. Si vous êtes dans CMD (qui n’est plus maintenu), utilisez

set NODE_ENV=production

Cela doit être exécuté dans l'invite de commande où vous souhaitez exécuter votre application Node.js.

La ligne ci-dessus définit la variable d'environnement NODE_ENV pour la commande Invite dans laquelle vous exécutez la commande.

Pour définir globalement les variables d'environnement afin qu'elles persistent au-delà de l'invite de commande unique, vous pouvez trouver l'outil dans Système dans le Panneau de configuration (ou en saisissant "environnement" dans la zone de recherche du menu Démarrer).

385
Jani Hartikainen

Je viens de trouver un paquet Nice Node.js qui peut beaucoup aider à définir les variables d'environnement en utilisant une syntaxe unique, multiplateforme.

https://www.npmjs.com/package/cross-env

Cela vous permet d'écrire quelque chose comme ceci:

cross-env NODE_ENV=production my-command

Ce qui est assez pratique! Plus de commandes spécifiques à Windows ou Unix!

159
MoOx

Dans PowerShell:

$env:NODE_ENV="production"
157
jsalonen

L'idéal serait de pouvoir définir des paramètres sur la même ligne que votre appel pour démarrer Node.js sous Windows. Examinez attentivement les éléments suivants et exécutez-les exactement comme indiqué:

Vous avez ces deux options:

  1. En ligne de commande:

    set NODE_ENV=production&&npm start
    

    ou

    set NODE_ENV=production&&node index.js
    
  2. Exécutez "npm run start_windows" sur la ligne de commande avec votre fichier package.json configuré comme suit

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
    

L'astuce pour que cela fonctionne sur Windows est que vous devez supprimer les espaces avant et après le "&&".

68
Alexander Mills

Vous pouvez utiliser

npm run env NODE_ENV=production

C’est probablement la meilleure façon de le faire, car il est compatible sous Windows et Unix.

Dans la documentation du script d'exécution npm :

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.

27
Brieuc P

Si vous utilisez Visual Studio avec NTVS, vous pouvez définir les variables d'environnement sur la page de propriétés du projet:

 Visual Studio NTVS Project Properties

Comme vous pouvez le constater, les menus déroulants Configuration et Plateforme sont désactivés (je n’ai pas cherché à savoir pourquoi.), Mais si vous modifiez votre fichier .njsproj comme suit:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

Le menu déroulant "Débogage/Libération" contrôlera ensuite la définition de la variable avant de lancer Node.js.

13
paul

Mon expérience avec Node.js sous 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 pendant la durée de la fenêtre cmd dans laquelle elle est définie.

Test simple dans Node.js:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

Il renvoie 'undefined' lors de l'utilisation de set et renvoie 'development' si vous utilisez setx et redémarrez Visual Studio.

8
edhubbell

Juste pour clarifier, et pour quelqu'un d'autre qui peut être en train de lui arracher les cheveux ...

Si vous utilisez git bash sous Windows , set node_env=production&& node whatever.js ne semble pas fonctionner . Au lieu de cela, utilisez le cmd natif. Ensuite, utilisez set node_env=production&& node whatever.js comme prévu.

Mon cas d'utilisation: 

Je développe sous 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éclenche pas dans l'environnement de production.

6
pstrawberriedev

J'ai écrit un module win-node-env avec lequel vous pouvez exécuter votre commande exactement comme vous le feriez dans * nix.

NODE_ENV=production node myapp/app.js

Cela fonctionne en créant un NODE_ENV.cmd qui définit la variable d'environnement NODE_ENV et génère un processus enfant avec le reste de la commande et ses arguments.

Installez-le simplement (globalement) et exécutez vos commandes de script npm, il devrait automatiquement les faire fonctionner.

npm install -g win-node-env
5
laggingreflex

Voici la méthode sans ligne de commande:

Sous Windows 7 ou 10, tapez environment dans la zone de recherche du menu Démarrer, puis sélectionnez Modifier les variables d'environnement du système.

Vous pouvez également accéder à 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.

 System Dialog Box

La boîte de dialogue Variables d'environnement s'ouvre. 

 Environment Variable Dialog Box

En bas, sous Variables système, sélectionnez Nouveau ... Cela ouvrira la boîte de dialogue Nouvelle variable système.

 enter image description here

Entrez 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 sur process.env. S'il ne s'affiche toujours pas, redémarrez votre ordinateur.

5
Mattatat-tat

Pour exécuter votre application dans PowerShell (puisque && est interdit):

($env:NODE_ENV="production") -and (node myapp/app.js)

Notez que le texte de ce que fait le serveur est supprimé et je ne suis pas sûr que cela soit réparable. (Développer la réponse de @ jsalonen.)

4
Cameron Yick

premier dans le type powershell

$env:NODE_ENV="production"

puis tapez 

node fileName.js

Cela fonctionnera parfaitement en affichant toutes les sorties.

3
Abhinav

J'ai utilisé le script npm pour exécuter une tâche gulp sans "&&"

NODE_ENV = testcases npm run seed-db

0
Mari Orlova

Si vous utilisez un terminal GITBASH "set NODE_ENV=production" Ne fonctionnera pas, que pouvez-vous faire est de taper "Export NODE_ENV=production"

0

cela ne va pas définir une variable mais c'est utile dans de nombreux cas. Je ne recommanderai pas de l'utiliser pour la production, mais ça devrait aller si vous jouez avec NPM.

npm install --production
0
Bar Horing