[英]Why can't I log `process.env` in my bundled code with Webpack?
我正在使用Dotenv
和DefinePlugin()
将这些环境变量添加到我的包中。
webpack.config.js
new Dotenv(),
new webpack.DefinePlugin({
"process.env.TEST_ENV": JSON.stringify("xxx")
}),
Dotenv
加载一个带有一堆环境变量的.env
文件。 一切正常。
默认情况下, NODE_ENV
根据您在 webpack.config.js 中设置的mode
注入webpack.config.js
。
这工作正常,我可以从我编译和捆绑的代码中读取NODE_ENV
和TEST_ENV
。
index.js
const { NODE_ENV, TEST_ENV } = process.env;
console.log(`process.env: ${JSON.stringify(process.env)}`);
console.log(`NODE_ENV: ${JSON.stringify(NODE_ENV)}`);
console.log(`TEST_ENV: ${JSON.stringify(TEST_ENV)}`);
如上图所示,我可以从process.env
object 成功访问并记录变量NODE_ENV
和TEST_ENV
。
但是当我尝试记录process.env
本身时,它会记录一个空的 object {}
,您也可以从图片中看到。
这是为什么? 为什么我不能像使用它的属性NODE_ENV
和TEST_ENV
那样记录process.env
?
来自: https://webpack.js.org/plugins/define-plugin/
鉴于DefinePlugin
直接替换您的代码,当您执行此操作时:
webpack.config.js
new webpack.DefinePlugin({
"process.env.SOME_VARIABLE": JSON.stringify("SOME_VALUE")
});
你在你的代码中这样称呼它:
index.js
const SOME_VARIABLE = process.env.SOME_VARIABLE;
Webpack 将其转译为:
const SOME_VARIABLE = "SOME_VALUE"
它完全替换了字符串"SOME_VALUE"
的process.env.SOME_VARIABLE
。 这也是您需要调用JSON.stringify("SOME_VALUE")
的原因。 因为否则你会得到const SOME_VARIABLE = SOME_VALUE
,没有字符串引号,你会得到SOME_VALUE is not defined
错误。
这就是您不能在捆绑代码中记录或解构process.env
的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.