process.env 在 webpack 之前未定义

Posted

技术标签:

【中文标题】process.env 在 webpack 之前未定义【英文标题】:process.env undefined BEFORE webpack 【发布时间】:2021-09-27 14:19:20 【问题描述】:

我有一个使用 expressjswebpack 构建的服务器端渲染应用程序。 s-s-r 页面中有一些反应脚本。但是,在控制台日志之后,我发现 process.env 在不同的 js 文件中并不总是相同的值。

我使用process.env.node_env在对应的环境中定义不同的API url,并使用Dotenv-webpack注入node_env。

未定义的 node_env 都是在 webpack 构建信息之前在终端上登录的控制台。它们都用在 s-s-r 静态页面上。

[nodemon] starting `node ./bin/www.js`
4 undefined
envenvenv undefined
19 undefined
envenvenv undefined
18 undefined
envenvenv undefined
5 undefined
envenvenv undefined
6 undefined
envenvenv undefined
3 undefined
envenvenv undefined
17 undefined
envenvenv undefined
(node:27468) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
webpack built 6a9a1e2ed86071ed2ac3 in 14421ms
Hash: 6a9a1e2ed86071ed2ac3
Version: webpack 4.45.0
Time: 14421ms
Built at: 07/20/2021 11:11:15 AM

虽然正确定义的 node_env 都是在 chrome 上登录的控制台,并且它们都用于 react 组件。

我认为某些 s-s-r 页面是在 webpack 捆绑之前“生成”的,因此它们是未定义的。但是 react 组件在捆绑并发送到客户端后会在 chrome 中呈现,因此它们具有正确的 node_env。

正确吗?如何解决这个问题?

【问题讨论】:

【参考方案1】:

nodemon 告诉你错误, 执行的命令是

node ./bin/www.js 

你需要给它添加 NODE_ENV

NODE_ENV=development node ./bin/www.js

【讨论】:

【参考方案2】:

Ernesto 的方法应该是一个很好的解决方案,而我在需要 node_env 的特定文件中实现了 dotenv 而不是 dotenv-webpack。

似乎 s-s-r 页面是在 webpack 捆绑之前编译的。所以我不能使用 dotenv-webpack 插件来使它们可用。

【讨论】:

以上是关于process.env 在 webpack 之前未定义的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose 未定义的 process.env

理解webpack之process.env.NODE_ENV详解(十八)

理解webpack中的process.env.NODE_ENV

webpack 警告 - DefinePlugin 中的警告 'process.env.NODE_ENV' 的冲突值

process.env.NODE_ENV和env在webpack中的使用

通过 webpack 将 process.env.NODE_ENV 变量导入 scss