我有一个 Webpack 服务器,它接受选项、编译代码并将其作为字符串返回(不仅仅是本地或管道构建工具,而是实际的生产服务)。我需要静态选项/功能标志来决定保留哪些代码以及使用哪些功能。
据我所知,我有两个选择:DefinePlugin
和 EnvironmentPlugin
。
但是 Webpack I/O 是异步的,我的请求处理逻辑也是异步的。
如果进程是异步的,是否有可能 1. 请求设置“全局选项”,开始编译,2. 请求进入并设置其“全局选项”,1. 请求编译继续并使用 2.请求选项?
或者定义的 global/process.env 变量是否仅适用于该特定编译?两个插件?
// inside Webpack config
// option 1
new webpack.DefinePlugin({
OPTION1: JSON.stringify(option1),
OPTION2: JSON.stringify(option2),
});
// option 2
process.env.OPTION1 = option1;
process.env.OPTION2 = option2;
new webpack.EnvironmentPlugin(['OPTION1', 'OPTION2']);
// Webpack programmatic API
const compiler = webpack(config);
compiler.run(...);
// in code
// if OPTION1 is falsey, this block
// isn't added to final bundle
if (OPTION1) {
// dynamic import/require fancy feature X
}
最佳答案
process.env
是进程范围的,因此根据 EnvironmentPlugin
的实现方式,它要么仅读取一次环境变量(在启动时),要么在调用时读取环境变量(其中导致您担心的问题)。所以 EnvironmentPlugin
在这里不是一个好的选择。
但是,使用DefinePlugin
,整个配置似乎都包含在插件中,因此它应该是安全的。只需确保为每个请求创建一个新的编译器对象即可。
关于javascript - Webpack global/process.env 变量范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60786373/