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?
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).
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!
Dans PowerShell:
$env:NODE_ENV="production"
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:
En ligne de commande:
set NODE_ENV=production&&npm start
ou
set NODE_ENV=production&&node index.js
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 "&&".
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.
Si vous utilisez Visual Studio avec NTVS, vous pouvez définir les variables d'environnement sur la page de propriétés du projet:
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.
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.
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.
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
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.
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.
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.
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.)
premier dans le type powershell
$env:NODE_ENV="production"
puis tapez
node fileName.js
Cela fonctionnera parfaitement en affichant toutes les sorties.
J'ai utilisé le script npm pour exécuter une tâche gulp sans "&&"
NODE_ENV = testcases npm run seed-db
Si vous utilisez un terminal GITBASH "set NODE_ENV=production"
Ne fonctionnera pas, que pouvez-vous faire est de taper "Export NODE_ENV=production"
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