Webpack 4增加了一个新特性: 它现在支持它打包的模块的 package.json
中的 sideEffects
标志。
在过去的30天里,我们与每个框架密切合作,以确保它们能够在各自的客户端等支持 webpack 4。甚至流行的库,比如 loash-es,RxJS 也支持 sideEffect 标志,所以通过使用它们的最新版本,您将看到即时的包大小即时减小。
来自 Webpack 文档
Big-module 的 package.json 中的“ sideeffect”: false 标志表明包的模块没有副作用(在求值时) ,只公开导出。这使得像 webpack 这样的工具可以优化重新导出。
虽然第二个链接显示了使用标志的结果,但是它没有清楚地解释什么是副作用。ES6包含了 给你概述的模块副作用的概念,但是这与 Webpack 考虑的副作用有什么关系。
在 sideEffects
标志的上下文中,模块需要避免哪些操作才能使用 sideEffects:false
而不出现问题,或者相反,模块需要做哪些操作才能使用 sideEffects:false
而不出现问题。
为了完整起见,尽管@SeanLarkin 在下面给出了可靠的回答,我还是希望得到以下方面的澄清:
显然,副作用指的是 fp 中特定的东西,包括日志记录(控制台或其他地方)和抛出错误。我想在这种情况下,这些都是完全可以接受的吧?
模块是否可以包含循环引用并仍然使用 sideEffects: false
?
是否有任何方法可以验证或者一个模块能够验证一个模块除了尝试跟踪由于误用而导致的错误之外还能够 sideEffects: false
?
是否有任何其他因素会阻止模块能够使用 sideEffects: false
?