#1 楼
在运行您的应用程序之前,您可以在控制台中执行此操作,export NODE_ENV=production
,如果您在Windows中,则可以尝试以下操作:
SET NODE_ENV=production
对于PowerShell:
$env:NODE_ENV="production"
或者您可以像这样运行您的应用程序:
NODE_ENV=production node app.js
您也可以在js文件中设置它:
process.env.NODE_ENV = 'production';
但是我不建议在您的运行时文件,因为在服务器中打开VIM并将其更改为生产环境并不容易。您可以在目录中创建config.json文件,并且每次您的应用运行时,它都会从文件中读取并设置配置。
评论
这是个坏建议。从应用本身可靠地设置process.env.NODE_ENV会很棘手。最好正确设置环境变量,如下面的Daniel所示。
– M.K.萨菲
2013年9月9日19:55
我喜欢在每次运行应用程序时显式设置NODE_ENV,就像第二个示例(NODE_ENV =生产节点app.js)一样。这样,如果您忘记将本地NODE_ENV重新设置为开发状态,则可以避免将来的麻烦。
–乔恩
14年2月15日在19:52
有关简单的跨平台解决方案,请参考npmjs.com/package/cross-env。 cross-env NODE_ENV =生产可在Windows和linux / mac上运行。
– AntonB
16-6-4在13:55
@Gleb NODE_ENV =永远可以生产app.js。
–法里·诺里·内沙
17年9月19日在18:51
对此问题有666人赞成,恶魔的工作得到证实!
–松鼠训练
20年7月9日在9:11
#2 楼
在package.json中:{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
然后在终端中运行:
npm start
评论
不要开始将一堆脚本放在package.json中,这是一个不好的做法,因为您会引入不一致的地方,这会杀死项目中的不变性。我知道很多人创建脚本来运行grunt或gulp,但不要这样做
–PositiveGuy
2015年7月8日,下午3:34
@WeDoTDD你在说什么?这些脚本的用途类似于makefile的工作方式。使用它作为本示例或您提到的运行gulp是一个非常合理的用例。对于简单的任务,我现在什至不使用gulp并在脚本中完成所有操作,这使工作变得更快,并且我让webpack来完成gulp曾经完成的工作。
– MarkoGrešak
2015年11月9日在3:03
@WTF-在package.json中使用脚本是什么“坏习惯”?这就是脚本:部分的要点!它完全有效,消除了大吃大喝的烦恼。全部通过命令和webpack完成。
– TetraDev
16年5月20日在22:30
@WTF使用脚本实际上可以大大提高一致性。您可以设置在多个项目中使用的一组标准命令,这些命令可能不使用相同的基础构建脚本,库等。您至少可以尝试使用事实和示例来支持您的观点。
–刘易斯·戴蒙德
16年8月16日在20:12
将NODE_ENV = production放在package.json中没有多大意义。在开发中运行npm start将在生产中运行它。您可能就像总是在生产代码一样编写代码,因为您总是以这种方式运行它。我看到的原因之一是强制其他模块(例如Express)在生产模式下运行。如果根本不更改环境变量,为什么还要使用它们呢?
– Nateowami
17年1月23日在15:54
#3 楼
没人在这里提到过吗?在您的应用程序根目录中创建一个.env
文件,然后创建.env
并读取值。易于更改,易于阅读的跨平台。https://www.npmjs.com/package/dotenv
评论
奇怪的是没有人提到它,我认为这是最好的解决方案。将环境名称与其余变量放在同一文件中。
–华硕霸王龙
18年3月14日在18:05
在.env文件中设置NODE_ENV将不起作用。看到这个:github.com/motdotla/dotenv/issues/328
–Michael Zelensky
19年1月28日在10:51
对我来说,在.env文件中设置“ mode”:“ production”有效。
– DarkLite1
20年9月9日在7:22
#4 楼
export NODE_ENV=production
是错误的解决方案,重新启动后消失。 如果您不想再担心该变量,请将其添加到此文件中:
/etc/environment
不要使用导出语法,只需写入(如果已有一些内容,请换行):
NODE_ENV=production
重新启动后可以工作。您将不再需要在任何地方重新输入export NODE_ENV = production命令,而只需将节点与您想要的任何东西一起使用-永远,pm2 ...
对于heroku:
heroku config:set NODE_ENV="production"
,这实际上是默认值。
评论
维护噩梦。如果您没有对/ etc的权限,该怎么办?
–flowersoftime
16年6月16日在21:41
我个人使用NODE_ENV = production gulp bundle-production-app捆绑生产就绪脚本,在服务器中NODE_ENV在服务器环境中,而在开发机中则不存在。在某些机器中,如果未设置它,那就是噩梦,而您希望始终设置它。在某些情况下,您希望没有它,因此您无需添加。无论如何,在执行UI时,我会明确说明它是否处于开发模式,因此您永远不会质疑它是打开还是关闭。如果NODE_ENV是!==生产,那么您就处于其他模式,这根本就没有噩梦。一切都很好,一切都很好。
–卢卡斯·莱西斯(Lukas Liesis)
16年7月12日在10:08
+1讨论如何使其持久。我想知道有多少人仅在本届会议上认为它会持续存在?重启之前该怎么办?如果要立即设置,是否应该将其放在/ etc / environment中并运行export NODE_ENV = production?
– Nateowami
17年1月23日在16:03
#5 楼
不必担心您是在Windows,Mac还是Linux上运行脚本,都可以安装cross-env软件包。然后,您可以轻松地使用脚本,例如:"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"
}
此软件包开发人员的大量道具。
npm install --save-dev cross-env
评论
如果将其安装为开发依赖项,它将如何工作?在生产中,应使用--production标志安装npm软件包,因为这是dev依赖项,因此不会安装cross-env。
–达维什
20 Dec 19'在10:23
#6 楼
heroku config:set NODE_ENV="production"
评论
嗯,这就是我所需要的。你真棒
–康纳·里奇(Connor Leech)
2014年6月17日23:07
现在,NODE_ENV = production是Heroku node.js部署中的默认设置。
–sean
16年8月1日在23:54
heroku不是唯一部署的地方
–帕万·卡特帕利(Pavan Katepalli)
17年7月15日在0:18
#7 楼
对于Windows Powershell,请使用以下命令$env:NODE_ENV="production" ; node app.js
#8 楼
在OSX上,我建议将export NODE_ENV=development
添加到您的~/.bash_profile
和/或~/.bashrc
和/或~/.profile
中。我个人将其添加到我的
~/.bashrc
中,然后让~/.bash_profile
~/.profile
导入该文件的内容,因此在所有环境中都是一致的。完成这些添加后,请确保重新启动终端以获取设置。
#9 楼
如果您在Windows上。在右边的文件夹中打开cmd,然后先set node_env={your env name here}
回车,然后可以使用
node app.js
启动节点。 >它将从您的环境设置开始
评论
重新启动后会消失吗?没有窗户,不能尝试自己。
–卢卡斯·莱西斯(Lukas Liesis)
16 Mar 5 '16 at 6:26
如果您询问是否重新启动节点,则直到完全关闭命令提示符后,它才会消失。但是,如果Windows Server重新启动ofc,它将消失。
–garenyondem
16 Mar 5 '16 at 11:14
谈论操作系统重启。这就是为什么我最好找到另一种方法来停止怀疑每次安装Windows更新,或者只是重新启动,一次又一次地关于这个问题。
–卢卡斯·莱西斯(Lukas Liesis)
16 Mar 6 '16 at 12:17
#10 楼
如果在应用程序中使用webpack,则可以使用DefinePlugin
... 对其进行简单设置,因此在
plugin
部分中,将NODE_ENV设置为production
:plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"',
})
]
#11 楼
Windows CMD->set NODE_ENV=production
Windows Powershell->
$env:NODE_ENV="production"
MAC->
export NODE_ENV=production
#12 楼
为了拥有多个环境,您需要所有答案(NODE_ENV参数并导出),但是我使用一种非常简单的方法,无需安装任何工具。在package.json中,为每个所需的环境放入一个脚本,如下所示:在代码中,您可以使用
npm start
访问当前环境。Voila。
评论
NODE_ENV应该是“开发中”或“生产中”,但第三方代码无法识别以上内容(尽管您可能正在查看process.env)
– John Culviner
20 Jan 17 '20 at 17:36
#13 楼
Daniel给出了一个很好的答案,这是正确部署(设置并忘记)过程的更好方法。对于那些使用express的人。
您也可以使用grunt-express-server。
https://www.npmjs.org/package/grunt-express-server
#14 楼
您可能有机会创建两个sequelize对象的实例,例如:var con2 = new Sequelize();
会发生同样的错误
#15 楼
npm start --mode production
npm start --mode development
使用
process.env.NODE_ENV ='生产'
评论
对于多平台解决方案,您可以找到答案stackoverflow.com/a/57509175/11127383