javascript - Webpack global/process.env 变量范围?

标签 javascript node.js webpack

我有一个 Webpack 服务器,它接受选项、编译代码并将其作为字符串返回(不仅仅是本地或管道构建工具,而是实际的生产服务)。我需要静态选项/功能标志来决定保留哪些代码以及使用哪些功能。

据我所知,我有两个选择:DefinePluginEnvironmentPlugin

但是 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/

相关文章:

node.js - Mongoose.js - TypeError : Model. deleteOne 不是函数

node.js - VSTS 构建 webpack/NPM 环境配置

Javascript webpack 从第三个库导入类

javascript - jquery mouseenter 不适用于特定 div

如果未选择复选框,则 Javascript 禁用按钮 - 问题

javascript - Node.js 从实例中获取模块名称

json - NodeJS JSON 应该是全局的,但它是本地的

javascript - Vue devtool如何检测网页上的Vue?

javascript - 使用 Chart.js 的圆 Angular 堆叠条形图

javascript - 如何使用 CORS 实现 JavaScript Google Places API 请求