Webpack 将声明标记为树木摇晃无副作用
我有一个包含ESM导出的软件包,其中导出的函数具有属性: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也包含在捆绑
函数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'})