访问 NODE_ENV 在前端代码中有意义吗?

2024-01-10

我有一个正在部署的反应/节点应用程序。其中一个组件尝试访问 NODE_ENV 以确定要使用的主机 URL(localhost 或 heroku)。

我现在意识到,即使 NODE_ENV 被设置为生产环境,它在浏览器上下文中始终是“未定义”的,因为环境不是节点。

由于我无法从 React 组件访问 NODE_ENV,如何动态设置主机服务器?


其中一个组件尝试访问 NODE_ENV 以确定要使用的主机 URL(localhost 或 heroku)。

是的,绝对!

在构建时和运行时拥有东西之间存在差异。你将会有NODE_ENV在构建时附近 - 假设你运行webpack或者构建一些 JSX 之类的东西。

你不会有NODE_ENV在运行时,当用户访问您的网站时。该网络浏览上下文中没有环境变量的概念。

在本例中,我所做的是以编程方式创建一个有条件地包含 Web 服务器 URL 的文件。或者甚至捕获NODE_ENV并将该值放入应用程序中以供稍后使用。

举一个实际的例子:在几年前我参与的一个 React 项目中,我们自动生成了我们的 index.html 文件。这是一个愚蠢的小文件,引入了我们的<script>我们需要的 Javascript 标签并添加<div>让 React 应用程序渲染。在模板语言中,我们做了如下操作:

索引.html.模板

<html><body ENVIRONMENT="$NODE_ENV"></body></html>

该文件从我们的构建管道的另一端出来后,对于我们的生产构建来说它看起来像这样:

索引.html

<html><body ENVIRONMENT="PRODUCTION"></body></html>

然后我们只使用普通的 DOM Javascript 来获取 body 元素并检查属性(然后将其放入 Redux 存储中?我完全忘记了)。

在用户访问时,我们有一个明显硬编码的“生产”值。但你和我更清楚!

Update: 我忘了,实际上有两种方法可以做到这一点在 Webpack 本身中,无需使用外部模板工具并生成我在此处描述的文件!

  1. 使用 WebPack 定义插件。这实际上会在转译阶段添加另一个步骤:进入并用其他文字字符串替换文字字符串。所以let e = "NODE_ENV"会成为let e = "production"。有一个关于defineplugin 的优秀Medium 博客文章 https://medium.com/@justintulk/passing-environment-variables-into-your-code-with-webpack-cab09d8974b0,这有点酷。

  2. Webpack 本身有一些环境变量支持。显然如果你运行 webpackwebpack --env.NODE_ENV=production。那么...也许你可以使用process.env.NODE_ENV ? The 此功能的 Webpack 文档 https://webpack.js.org/guides/environment-variables/对此不太清楚

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问 NODE_ENV 在前端代码中有意义吗? 的相关文章

随机推荐

  • 强制 linux 排序使用字典顺序

    我生成了一个带有伪随机数的文本文件 如下所示 853340442 1130519212 2070936922 707168664 2076185735 2135012102 166464098 1928545126 5768715 1060
  • 在迭代 Python 字典时修改它

    假设我们有一个 Python 字典d 我们像这样迭代它 for k v in d iteritems del d f k remove some item d g k v add a new item f and g只是一些黑盒转换 换句话
  • 如何防止在更改源列表时调用 ComboBox Change 事件

    TL DR 如何防止在源列表中添加或删除项目时触发 ActiveX ComboBox 请注意我见过这个帖子 https stackoverflow com questions 19276861 how to prevent activex
  • 按钮周围的虚线边框

    我试图在按钮周围绘制虚线边框 但是边框没有出现 不确定我在这里做错了什么 你能帮忙吗 我的 Xaml 代码
  • 在大型 MySQL 表中添加新列

    在大型 MySQL 表中添加新列的最快方法是什么 ALTER TABLE ADD COLUMN创建完整表的副本 然后用新创建的表替换旧的副本 当此进程运行时 原始表是可读的 但所有插入和更新都会停止 在大型表上 复制可能需要很长时间 有什么
  • 如何将 mechanize.Browser() cookie 保存到文件?

    我怎样才能使Python的模块mechanize 特别是mechanize Browser 将其当前的cookie保存到人类可读的文件中 另外 我该如何将该 cookie 上传到网页上呢 Thanks Deusdies 我刚刚参考了 Myk
  • gRPC 客户端不处置 Channel

    我正在使用 gRPC 开发 net core 2 0 应用程序并发现一个问题 删除对 gRPC 客户端类实例的引用后 仍然存在使用资源 内存和处理器 的通道 示例代码 public class MyClient ClientBase pub
  • 软标签上的 scikit-learn 分类

    根据文档 可以指定不同的损失函数SGDClassifier 据我了解log loss is a cross entropy理论上可以处理软标签的损失函数 即以一些概率 0 1 给出的标签 问题是 是否可以使用SGDClassifier wi
  • 在WSO2 ESB 4.7.0中,我们可以在接收序列中进行JMS回滚吗?

    我已经在 WSO2 ESB 4 7 0 中配置了带有事务和 CLIENT ACKNOWLEDGE 的 Apache ActiveMQ axis2 xml 配置是
  • Intellisense 不工作 golang 测试文件

    标题说明了一切 我打开一个测试文件 类型 package 什么也没有出现 这不是延迟问题 这不是一个空包裹 如何开启智能感知 更新 我已经向 VSCode Golang 团队提交了错误通知单 当我们找到更多信息时 我会在这里报告 https
  • ctypes:将字符串转换为函数?

    我正在读这篇文章在笔测试期间逃避防病毒软件的技巧 http pen testing sans org blog pen testing 2011 10 13 tips for evading anti virus during pen te
  • Restful Web 服务认证

    我有一个 Restful Web 服务 API 正在被不同的第 3 方使用 该 API 的一部分受到限制 您需要用户名 密码才能访问它 我想知道实施身份验证的最佳方法是什么 我使用的是 https 因此通信是加密的 我有两个想法 在用户开始
  • Qt 右键单击​​ QListWidget 打开上下文菜单并删除项目

    我想知道当我右键单击表格项目时如何打开弹出菜单 在弹出菜单中 应给出一些操作 例如添加和删除 这将创建新行或删除所选行 我是 Qt 世界的新手 所以如果有人能给我完整的详细信息 如果可能的话 提供代码 那么我将非常感谢他 她 谢谢 My g
  • Excel VBA:工作表保护未按预期工作

    使用 VBA 我试图禁止插入和删除行和列 同时允许用户编辑单元格内容 我希望以下调用能够解决问题 ActiveSheet Protect Password SomePassword AllowInsertingColumns False A
  • ASP.NET 2.5 前缀 ctl00 和 ASP.NET 4 不前缀 ctl00

    有谁知道为什么 ASP NET 4 放弃了ctl00ASP 控件上的前缀 有没有我错过的设置 在 ASP NET 4 0 中 他们引入了对更简洁的 HTML 语法的支持 你可以阅读相关内容在 Scott Gu 的博客 http weblog
  • 原生 Javascript 页面加载消息?

    我想要一个页面阻塞 加载脚本 该脚本将覆盖整个页面并在加载所有资源时显示 正在加载 消息 以避免无样式内容的闪烁等 我基本上想要类似的东西jQuery 的 BlockUI http jquery malsup com block page的
  • python 中的高斯-勒让德算法

    我需要一些帮助来计算 Pi 我正在尝试编写一个 python 程序来将 Pi 计算为 X 位数字 我已经尝试了 python 邮件列表中的几个 但它对我的使用来说太慢了 我读过有关高斯 勒让德算法 http en wikipedia org
  • 《使用 Rails 进行敏捷 Web 开发》一书:CSS 未应用

    我刚刚通过阅读著名的实用书架书籍 Agile Web Development with Rails 开始深入 Rails 的世界 到目前为止 我确实遵循了所有示例 但现在我被困在第 85 页 pdf 版本 其中应该将自定义 CSS 添加到项
  • XSLT - 从 URL 获取文件名

    我需要从 URL 获取文件名 URL 是动态的 并且斜杠的数量可以是不同的数量 我使用 xslt 1 0 所以寻找需要的东西 http DevSite sites name Lists note Attachments 3 image jp
  • 访问 NODE_ENV 在前端代码中有意义吗?

    我有一个正在部署的反应 节点应用程序 其中一个组件尝试访问 NODE ENV 以确定要使用的主机 URL localhost 或 heroku 我现在意识到 即使 NODE ENV 被设置为生产环境 它在浏览器上下文中始终是 未定义 的 因