为了账号安全,请及时绑定邮箱和手机立即绑定

关于webpack4 sideEffects到底是个啥玩意?

关于webpack4 sideEffects到底是个啥玩意?

拉风的咖菲猫 2019-03-14 18:14:21
哇!!!!我仔仔细细的看了 webpack > v4.16.0 > 文档 > 指南 > Tree Shaking 中对于sideEffects的介绍,不管是按他文档表面的意思还是结合上下文来看 sideEffects这个属性都好像是用来裁剪未引入的代码(就是文中提示的死代码),比如下面://index.js (这是node_modules 下 myplugin模块,他包含index.js 和 package.json)function a(){'is a'};function b(){'is b'};export {a , b};//package.json{    "name":'myplugin',    "sideEffects":false}//main.jsimport {a} from 'myplugin';a();当打包后 按理输出代码中不再包含 b函数的相关代码, 但是"sideEffects":false并没有什么卵用,还是所有代码都被打包,反而如果想去掉b代码,只要 mode: "development" 就行!所以。。。。。。这sideEffects到底是个啥玩意?到底有啥用?到底什么场景用?还有就是这玩意要设置在模块的package.json中,并且webpack文档也说这是个库级设置,那是不是这玩意只能由模块的作者来设置?我们设置也没啥卵用,重装模块就没了! 哇,困惑啊。。。。。
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

个人愚见:"sideEffects":false只是告诉webpack找到了没有用到的b代码,真正要在bundle中删除,其实要使用“UglifyJSPlugin”,用mode:"production"是能够“激活”UglifyJSPlugin的,他的下一小节minify the output有讲

如果想去掉b代码,只要 mode: "development" 就行
不知道这个是着呢么搞出来的


查看完整回答
反对 回复 2019-04-10
?
RISEBY

TA贡献1856条经验 获得超5个赞

sideEffects 是说模块内有没有立即执行的代码, 此类代码通常会产生副作用. 比如:


// a.js 文件


// 副作用, 在 import a 时发生

document.body.appendChild(document.createElement('div')); 


// 导出的模块

export default function foo() {};

通过 sideEffects 标记, 可以通知 webpack 使用一种更简便高效的方式来实现代码裁剪.


查看完整回答
反对 回复 2019-04-10
  • Timi_Sakura
    Timi_Sakura
    sideEffects和tree shaking就是一个笑话,看起来很nb的概念,其实只能起到微乎其微的作用,举个简单的例子,都有传言说tree shaking可以在sideEffects:false的情况下剔除import "@babel/polyfill",实际上呢?怎么可能呢,它有那个本事就好了,可以说这个设计蠢到极点,只能用来欺负一下 css 这种再明显不过的引用关系,对于其他的,说的那么复杂有啥用,因为它压根儿也不是按照那个路数走的,我看它源码里就一堆没用的垃圾。
  • 2 回答
  • 0 关注
  • 2442 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信