将带有静态字段的对象替换为 webpack 中字段的值

Lol*_*ums 4 javascript node.js webpack

我有一个如下所示的模块:

let Info = {};

Info.VALUE_ONE = 123;
Info.VALUE_TWO = 456;
Info.VALUE_THREE = 789;

module.exports = Info;
Run Code Online (Sandbox Code Playgroud)

我希望这个模块在编译后从代码中完全消失,只在适用的地方内联值 123、456 和 789——如何使用 Webpack 来做到这一点?

thg*_*ell 5

听起来您可能想要使用webpack.DefinePlugin,它允许您在编译时内联全局值。

webpack.config.js

plugins: [
  new webpack.DefinePlugin({
    Info: require('./info.js'),
  }),
  //...
]
Run Code Online (Sandbox Code Playgroud)

例如,您的源代码将被转换如下:

来源

let value = null;

switch (value) {
  case Info.VALUE_ONE:
    //...
  case Info.VALUE_TWO:
    //...
  case Info.VALUE_THREE:
    //...
  default:
    //...
}
Run Code Online (Sandbox Code Playgroud)

输出

let value = null;

switch (value) {
  case 123: //...

  case 456: //...

  case 789: //...

  default: //...

}
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是,如果您尝试内联的文件中有 `const Info = require('path/to/info')` ,那么 DefinePlugin 不会覆盖 Info,因为它被声明为常量。它似乎只覆盖未定义的全局变量。 (2认同)