Pour utilisation dans les environnements express.js. Aucune suggestion?
Avant d’exécuter votre application, vous pouvez le faire dans la console,
export NODE_ENV=production
Ou si vous êtes dans Windows, vous pouvez essayer ceci:
SET NODE_ENV=production
ou vous pouvez exécuter votre application comme ceci:
NODE_ENV=production node app.js
Vous pouvez également le définir dans votre fichier js:
process.env.NODE_ENV = 'production';
Mais je ne suggère pas de le faire dans votre fichier d'exécution, car il n'est pas facile d'ouvrir VIM sur votre serveur et de le changer en production. Vous pouvez créer un fichier config.json dans votre répertoire et chaque fois que votre application est exécutée, elle le lit et définit la configuration.
dans package.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
puis courez dans le terminal:
npm start
Personne n'a mentionné .env
ici encore? Créez un fichier .env
à la racine de votre application, puis require('dotenv').config()
et lisez les valeurs. Facilement changé, facile à lire, multiplate-forme.
export NODE_ENV=production
est une mauvaise solution, il disparaît après le redémarrage.
si vous ne voulez plus vous soucier de cette variable, ajoutez-la à ce fichier:
/etc/environment
n'utilisez pas la syntaxe d'exportation, écrivez simplement (dans la nouvelle ligne si du contenu existe déjà):
NODE_ENV=production
cela fonctionne après le redémarrage. Vous n'aurez plus besoin d'entrer à nouveau commande (== --- ==) exportation NODE_ENV = production et d'utiliser simplement noeud avec tout ce que vous voulez - pour toujours, pm2 ...
Pour heroku:
heroku config:set NODE_ENV="production"
qui est en réalité par défaut.
C'est un bon article sur NODE_ENV: http://www.hacksparrow.com/running-express-js-in-production-mode.html .
Pour configurer automatiquement à partir de Grunt, vous pouvez utiliser le plugin https://npmjs.org/package/grunt-env .
heroku config:set NODE_ENV="production"
Pour ne pas avoir à vous soucier de savoir si vous exécutez vos scripts sous Windows, Mac ou Linux, installez le package cross-env. Ensuite, vous pouvez facilement utiliser vos scripts, comme ceci:
"scripts": {
"start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
"start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}
Des supports massifs pour les développeurs de ce paquet.
Pour Windows Powershell, utilisez cette commande
$env:NODE_ENV="production" ; node app.js
Sous OSX, je vous recommande d’ajouter export NODE_ENV=development
à votre ~/.bash_profile
et/ou ~/.bashrc
et/ou ~/.profile
.
Personnellement, j’ajoute cette entrée à mon ~/.bashrc
, puis j’ai le ~/.bash_profile
~/.profile
importer le contenu de ce fichier afin qu’il soit cohérent d’un environnement à l’autre.
Après avoir effectué ces ajouts, veillez à redémarrer votre terminal pour prendre en charge les paramètres.
Si vous utilisez webpack dans votre application, vous pouvez simplement le définir ici, en utilisant DefinePlugin
...
Donc, dans votre section plugin
, définissez le NODE_ENV sur production
:
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"',
})
]
Si vous êtes sur Windows. Ouvrez votre cmd au bon dossier puis d'abord
set node_env={your env name here}
appuyez sur Entrée, vous pouvez alors commencer votre noeud avec
node app.js
ça va commencer avec votre réglage env
Daniel a une réponse fantastique qui est la meilleure approche pour le processus de déploiement correct (définir et oublier).
Pour ceux qui utilisent express. Vous pouvez utiliser grunt-express-server, qui est également fantastique. https://www.npmjs.org/package/grunt-express-server
Afin de disposer de plusieurs environnements, vous avez besoin de toutes les réponses avant (paramètre NODE_ENV et exportez-le), mais j'utilise une approche très simple sans rien installer. Dans votre package.json, il suffit de mettre un script pour chaque env dont vous avez besoin, comme ceci:
...
"scripts": {
"start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
"start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
}
...
Ensuite, pour lancer l'application au lieu d'utiliser npm start
, utilisez npm run script-prod
.
Dans le code, vous pouvez accéder à l'environnement actuel avec process.env.NODE_ENV
.
Voila.