Javascript 如何制作网页包装&x2B;跨块的简洁内联函数?
我在ES模块中定义了一个函数,我想确保它是内联的。当它只在一个块中使用时,它可以正常工作,但如果我从两个单独的块调用该函数,webpack会生成模块查找模式,从而阻止内联:Javascript 如何制作网页包装&x2B;跨块的简洁内联函数?,javascript,webpack,terser,Javascript,Webpack,Terser,我在ES模块中定义了一个函数,我想确保它是内联的。当它只在一个块中使用时,它可以正常工作,但如果我从两个单独的块调用该函数,webpack会生成模块查找模式,从而阻止内联: //common.js 导出函数inlineMe(x){ 返回x; } //main.js 从“./common”导入{inlineMe}; 导入('./ext')。然后(ext=>{ if(inlineMe(true)){ ext.f(); }否则{ log('未内联'); } }); //ext.js 从“./commo
//common.js
导出函数inlineMe(x){
返回x;
}
//main.js
从“./common”导入{inlineMe};
导入('./ext')。然后(ext=>{
if(inlineMe(true)){
ext.f();
}否则{
log('未内联');
}
});
//ext.js
从“./common”导入{inlineMe};
导出函数f(){
log(inlineMe(true)-“inlined”:“notinlined”);
}
使用TerserPlugin和以下标准选项通过网页包运行
// webpack.config.js
module.exports = {
mode: 'production',
entry: './main.js',
optimization: {
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {passes: 50, inline: true, unsafe: true},
},
}),
],
},
};
生成没有内联的结果。另一方面,如果我没有将代码分成块(即将import()
表达式更改为正常的顶级导入),或者如果我没有从两个块中使用inlineMe
,则内联工作正常。我认为这与webpack重写块的方式有关(它最终成为某种对象(r.a)(!0)
,其中r.a
似乎是由函数r(e){return e}n.d(t,“a”,(function(){return r}))
间接定义的,所以terser对此无能为力也就不足为奇了)
有没有什么咒语可以让这种内联跨多个块工作?也许可以通过某种方式告诉webpack,这个功能/模块应该比其他功能/模块更可用