process.env 在 webpack 之前未定义
Posted
技术标签:
【中文标题】process.env 在 webpack 之前未定义【英文标题】:process.env undefined BEFORE webpack 【发布时间】:2021-09-27 14:19:20 【问题描述】:我有一个使用 expressjs 和 webpack 构建的服务器端渲染应用程序。 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' 的冲突值