用于express.js环境。有什么建议吗?

评论

对于多平台解决方案,您可以找到答案stackoverflow.com/a/57509175/11127383

#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 ='生产'