如何在OS X中将NODE_ENV设置为生产/开发

时间:2012-02-08 17:23:19

标签: javascript node.js macos environment-variables

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

17 个答案:

答案 0 :(得分:599)

在运行您的应用之前,您可以在控制台中执行此操作,

export NODE_ENV=production

或者,如果你在Windows中,你可以试试这个:

SET NODE_ENV=production

或者您可以像这样运行您的应用:

NODE_ENV=production node app.js

您也可以在js文件中设置它:

process.env.NODE_ENV = 'production';

但我不建议在运行时文件中执行此操作,因为在服务器中打开VIM并将其更改为生产并不容易。您可以在目录中创建config.json文件,每次运行应用程序时,都会从中读取并设置配置。

答案 1 :(得分:88)

package.json中的

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

然后在终端中运行:

npm start

答案 2 :(得分:50)

这里没有人提到.env?在您的应用根目录中创建.env文件,然后require('dotenv').config()并读取值。易于更改,易于阅读,跨平台。

https://www.npmjs.com/package/dotenv

答案 3 :(得分:42)

export NODE_ENV=production是不好的解决方案,重启后会消失。

如果您不想再担心该变量,请将其添加到此文件中:

/etc/environment

请勿使用导出语法,只需编写(如果某些内容已经存在,则换行):

NODE_ENV=production

重启后才能运行。您不必再在任何地方重新输入 export NODE_ENV = production 命令,只需使用您喜欢的任何节点 - 永远,pm2 ......

对于heroku:

heroku config:set NODE_ENV="production"

实际上是默认值。

答案 4 :(得分:21)

这是一篇关于NODE_ENV的好文章:http://www.hacksparrow.com/running-express-js-in-production-mode.html

要从Grunt自动设置,您可以使用https://npmjs.org/package/grunt-env插件。

答案 5 :(得分:21)

heroku config:set NODE_ENV="production"

答案 6 :(得分:12)

不必担心您是在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"
}

这个包的开发者的大量道具。

答案 7 :(得分:8)

对于Windows Powershell,请使用此命令

$env:NODE_ENV="production" ; node app.js

答案 8 :(得分:6)

在OSX上,我建议您将export NODE_ENV=development添加到~/.bash_profile和/或~/.bashrc和/或~/.profile

我个人将该条目添加到~/.bashrc,然后~/.bash_profile ~/.profile导入该文件的内容,因此它在不同环境中保持一致。

完成这些添加后,请务必重新启动终端以获取设置。

答案 9 :(得分:2)

如果您在自己的应用中使用 webpack ,只需使用DefinePlugin ...

进行设置即可。

因此,在plugin部分中,将 NODE_ENV 设置为production

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]

答案 10 :(得分:1)

如果你在窗户上。首先在右侧文件夹中打开cmd

set node_env={your env name here}

按Enter键,然后您可以使用

启动节点
node app.js

它将以您的环境设置

开头

答案 11 :(得分:1)

为了拥有多个环境,您需要在获得所有答案之前(NODE_ENV参数并将其导出),但是我使用非常简单的方法而无需安装任何工具。在您的package.json中,为您需要的每个环境放入一个脚本,如下所示:

...
"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"
  }
 ...

然后,使用npm start来启动应用程序而不是使用npm run script-prod

在代码中,您可以使用process.env.NODE_ENV访问当前环境。

Voila。

答案 12 :(得分:0)

Daniel有一个很棒的答案,这是正确部署(设置和遗忘)过程的更好方法。

对于那些使用快递。 您也可以使用grunt-express-server,这也很棒。 https://www.npmjs.org/package/grunt-express-server

答案 13 :(得分:0)

Windows CMD-> set NODE_ENV=production

Windows Powershell-> $env:NODE_ENV="production"

MAC-> export NODE_ENV=production

答案 14 :(得分:0)

您可能创建了两个sequelize对象实例

例如: var con1 = new Sequelize(); var con2 = new Sequelize();

还会发生同样的错误

答案 15 :(得分:0)

npm start --mode production
npm start --mode development

有 process.env.NODE_ENV ='生产'

答案 16 :(得分:0)

您可以按如下环境运行,

NODE_ENV=production npm run start