【问题标题】:When is process.env set to NODE_ENV?什么时候 process.env 设置为 NODE_ENV?
【发布时间】:2020-03-15 07:12:48
【问题描述】:

我必须将此代码添加到我的项目中,该项目以 Express 作为后端,以 React 作为前端,以便部署到 Heroku(以及其他一些调整,如 heroku-postbuild 字段)。我是 Express/Node 的新手,并且阅读 process.env 是 Node 环境,但是仅检查它是否存在/是否设置为 true 意味着什么?我看到有人用它来设置process.env.NODE_ENV 用于开发或生产,但不熟悉这种用法。

if (process.env.NODE_ENV) {
  app.use(express.static('client/build'));
  const path = require('path');
  app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
  });
}

【问题讨论】:

标签: node.js express


【解决方案1】:

if 条件用于检查 NODE_ENV 是否已设置(例如,“”将评估为 false)。

* inside app.get() 是一个通配符,它​​匹配用户可以在浏览器中为此服务器键入的任何路由(即http://localhost/*)。

所以它的作用是,如果 NODE_ENV 设置为某些东西(不一定是开发或生产环境),那么对于请求的任何路由(或网站上的任何网页),您将发送 @987654333 @file back - 基本上呈现网站的索引(主)页面。

这个环境变量(即NODE_ENV)被定义为某些计算机中的环境变量(例如,像 Heroku 这样的云上某处的 VM)。在云上,它可能会将“生产”设置为一个值。在您的笔记本电脑上,它可能没有任何东西,因为您只是在测试它、玩它等等。但是生产环境非常重要,因为这是您应用的用户可以看到和使用您的应用的地方。

根据 Express.js 文档,“将 NODE_ENV 设置为“生产”可以使 Express 缓存视图模板;缓存从 CSS 扩展生成的 CSS 文件;并生成不那么冗长的错误消息。参考:https://expressjs.com/en/advanced/best-practice-performance.html

我的猜测是它会在 Heroku 上发送这个 index.html 文件,而在不是时会执行其他操作(取决于定义的路由)。

此链接也可能有帮助:https://dev.to/flippedcoding/difference-between-development-stage-and-production-d0p

P.S. Natalie 指出,自 2015 年以来,Heroku 将 Node.js 应用程序设置为默认使用 NODE_ENV=production。参考:https://devcenter.heroku.com/changelog-items/688

【讨论】:

  • 感谢您的回答。我了解该代码的作用,但我的问题更多是何时将 process.env 设置为 NODE_ENV (何时为假或未设置)。为了清楚起见,编辑了问题。
  • 所以这个环境变量(即NODE_ENV)被定义为某些计算机中的环境变量(例如,像Heroku这样的云上某处的VM)。在云上,它可能会将“生产”设置为一个值。在你的笔记本电脑上,它可能没有任何东西,因为你只是在测试它、玩它等等。但是生产环境非常重要,因为这是你应用的用户可以看到和使用你的应用的地方。
  • 根据 Express.js 文档,“将 NODE_ENV 设置为“生产”可以使 Express 缓存视图模板;缓存从 CSS 扩展生成的 CSS 文件;并生成不太冗长的错误消息。参考:expressjs.com/en/advanced/best-practice-performance.html
  • 它回答了你的问题,还是我应该澄清更多?
  • 是的,这回答了我的问题,谢谢。还以为我会为将来看到该问题的人添加,我发现(自 2015 年以来)Heroku 将 Node.js 应用程序设置为默认使用 NODE_ENV=production。 devcenter.heroku.com/changelog-items/688
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2010-10-10
  • 2011-05-15
  • 1970-01-01
相关资源
最近更新 更多