Webpack 将声明标记为树木摇晃无副作用

Webpack 将声明标记为树木摇晃无副作用,webpack,tree-shaking,Webpack,Tree Shaking,我有一个包含ESM导出的软件包,其中导出的函数具有属性: 函数Foo(){return'Foo'} Foo.displayName='Foo' 函数Qux(){return'Qux'} Qux.displayName='Qux' 函数栏(){return'Bar'+Qux()} Bar.displayName='Bar' 导出{Bar,Foo} 在我的应用程序中仅导入Foo: 从'pkg1'导入{Foo} console.log(Foo) 使用webpack生产模式编译时,Qux也包含在捆绑

我有一个包含ESM导出的软件包,其中导出的函数具有属性

函数Foo(){return'Foo'}
Foo.displayName='Foo'
函数Qux(){return'Qux'}
Qux.displayName='Qux'
函数栏(){return'Bar'+Qux()}
Bar.displayName='Bar'
导出{Bar,Foo}
在我的应用程序中仅导入
Foo

从'pkg1'导入{Foo}
console.log(Foo)
使用webpack生产模式编译时,
Qux
也包含在捆绑包中,除非
Qux.displayName='Qux'
被删除<代码>栏不包括在内

两个package.json都有
“副作用”:false

有没有办法告诉webpack/terser此声明没有副作用

回购示例:

添加对语句不起作用,只对函数调用起作用

Qux.displayName=/*@\uuuuu PURE\uuuu*/'Qux'//不起作用
一些不理想的解决方案

if(process.env.NODE_env!=“生产”){
Qux.displayName='Qux'
}
或标记
对象。将
函数调用指定为纯:

//Qux.js
/*@__PURE_u*/Object.assign(Qux,{displayName:'Qux'})