有没有办法使用 Webpack 向窗口对象公开环境变量?
例如,在执行REALM=stage npm run start
时,我希望 webpack 读取REALM
并将其作为window.__realm
提供,以便我的 React 应用程序可以从window
对象读取它。
您可以使用 DefinePlugin,文档: https://webpack.js.org/plugins/define-plugin/
在 webpack 配置中,你需要使用插件:
new webpack.DefinePlugin({FOO: '123'})
在代码中,您需要分配给变量:
window.FOO = process.env.FOO;
当 webpack 编译代码时,它会将 process.env.FOO 替换为 '123'; 因此,编译后您将获得:
window.FOO = '123';
您可以在output
配置对象中使用libraryTarget
:
output: {
library: "__realm",
libraryTarget: "window"
}
并用window.__realm
访问它.
@Andrey答案是我在任何地方找到的最接近的答案,但并不完全存在。
这就是最终对我有用的:
在您的 Webpack 配置中:
new webpack.DefinePlugin({'process.env.FOO': JSON.stringify(true)})
在项目源文件之一的顶层的某个位置:
window.FOO = process.env.FOO; // The necessity to do this seriously limits the utility of webpack.DefinePlugin in my view, but what can you do?
即使您尝试访问process
&process.env
时可能会undefined
它们,该值也会成功分配给window.FOO
。
console.log(window.FOO) // outputs: true