Far*_*hat 627

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

export NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)

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

SET NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)

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

NODE_ENV=production node app.js
Run Code Online (Sandbox Code Playgroud)

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

process.env.NODE_ENV = 'production';
Run Code Online (Sandbox Code Playgroud)

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

  • 我很喜欢每次运行应用程序时都明确设置`NODE_ENV`,如第二个例子(`NODE_ENV =生产节点app.js`).这样,如果您忘记将本地`NODE_ENV`设置回"开发",您可能会将自己从未来的发型中拯救出来. (14认同)
  • 这是一个糟糕的建议.从应用程序本身可靠地设置`process.env.NODE_ENV`会很棘手.最好在Daniel下面链接时正确设置您的环境变量. (12认同)
  • 有关简单的跨平台解决方案,请参阅https://www.npmjs.com/package/cross-env.`cross-env NODE_ENV = production`适用于windows和linux/mac. (2认同)

Blu*_*ari 95

在package.json中:

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后在终端运行:

npm start
Run Code Online (Sandbox Code Playgroud)

  • @WeDoTDD你在说什么?这些脚本的用法与makefile的工作方式类似.使用它作为这个例子或你提到的运行gulp是一个非常合理的用例.对于简单的任务,我现在甚至不使用gulp并在脚本中完成所有操作,使得工作更快,我让webpack完成以前通过gulp完成的工作. (37认同)
  • 他这样做的方式没有错 (26认同)
  • @WTF - 你是什么意思在package.json中使用脚本是"不好的做法"?这就是脚本的要点:部分,放置脚本!它完全有效,消除了吞咽或咕噜声的需要.全部通过命令和webpack完成. (15认同)
  • @WTF使用脚本实际上大大提高了一致性.您可以设置一组标准命令,以便在多个项目中使用,这些命令可能不会使用相同的底层构建脚本,库等.您至少可以尝试用事实和示例来支持您的观点. (6认同)
  • 在package.json中放置`NODE_ENV = production`没有多大意义.在开发中运行`npm start`将在生产中运行它.您可以像编写代码一样编写代码,因为您始终以这种方式运行代码.我认为这样做的一个原因是强制其他模块(例如Express)在生产模式下运行.如果它们永远不会改变,为什么要使用环境变量? (4认同)
  • 在 Windows 上,它需要是 `"start": "set NODE_ENV=生产节点 ./app"` (2认同)

Tho*_*abe 56

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

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

  • 奇怪的是没有人提到它,在我看来最好的解决方案。将环境名称与其余变量放在同一个文件中。 (2认同)
  • 在 .env 文件中设置 NODE_ENV 将不起作用。看到这个:https://github.com/motdotla/dotenv/issues/328 (2认同)

Luk*_*kas 44

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

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

/etc/environment
Run Code Online (Sandbox Code Playgroud)

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

NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)

它重新启动后工作.您不必再在任何地方重新输入export NODE_ENV = production命令,只需使用您想要的任何节点 - 永远,pm2 ......

对于heroku:

heroku config:set NODE_ENV="production"
Run Code Online (Sandbox Code Playgroud)

这实际上是默认的.

  • 维护噩梦.你没有/ etc权限的盒子怎么样? (2认同)

dav*_*ler 21

heroku config:set NODE_ENV="production"
Run Code Online (Sandbox Code Playgroud)

  • `NODE_ENV = production`现在在Heroku的默认Node.js的展开. (5认同)
  • heroku 不是唯一的部署位置 (3认同)
  • 啊,这就是我需要的.你真棒 (2认同)

Not*_*ous 16

无需担心您是在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"
}
Run Code Online (Sandbox Code Playgroud)

这个包的开发人员的大量道具.

  • 如果它作为开发依赖项安装,它将如何工作?在生产中,npm 包应该使用 --development 标志安装,该标志不会安装跨环境,因为它是开发依赖项。 (3认同)

Har*_*nan 8

对于Windows Powershell,请使用此命令

$env:NODE_ENV="production" ; node app.js
Run Code Online (Sandbox Code Playgroud)


Vin*_*hop 6

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

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

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