如何禁用 类 名称的 webpack 缩小

How to disable webpack minification for classes names

我使用 jasminekarmawebpack 来测试我的模块。 webpack 在启动测试之前预处理我的测试文件。

在我的测试中,我要测试 class Name{...}。我创建了新的 Name 实例,然后在我的测试中 expect(myInstance.constructor.name).toBe("Name")

class Name{}

const myInstance = new Name();

describe("The object",function(){
  it("should be the instance of Name class",function(){
    expect(myInstance.constructor.name).toBe("Name");  // Expected 't' to be 'Name'.
  })
});

但它 returns 未通过测试。我发现我的 Name class 被 webpack 解析为捆绑文件中的 t class 并且 myInstance.constructor.name 等于 "t".

我可以阻止 webpack 更改 classes/constructors 的名称吗?

无论何时处于开发模式(您可以在 webpack 配置对象中提及),分别为开发和生产设置构建设置,不要应用缩小插件(可能在您的 webpack 配置中)。

帮助链接:

  1. Bundling Modes
  2. Minification pluin

您可以使用缩小插件提供的 'keep_classnames' 选项来保持 class 名称完整。

安装 Terser 插件以自定义 Webpack optimization > minimizer 选项 运行:

npm i -D terser-webpack-plugin

...或者在您使用纱线的情况下:

yarn add -D terser-webpack-plugin

然后在webpack.config.js里面添加这个优化选项:

module.exports = {
  mode: ...,
  resolve: ...,
  target: ...,
  optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          keep_classnames: true,
        },
      }),
    ],
  },
};