是否有配置选项可禁用Webpack 4中未使用的模块检测?
我们最近从切换lodash
到lodash-es
以支持的树摇晃。它的效果很好,而且捆绑包很小,但是现在我们的构建大约需要两倍的时间(从3分钟到6分钟)。
最好在开发人员上禁用它,以加快构建速度,因为捆绑包的大小并不重要。
我发现了这个未公开的配置选项,但不确定如何应用https://github.com/webpack/webpack/blob/master/lib/WebpackOptionsDefaulter.js#L207。显然,UglifyJS不在dev中运行,因此我假设所有的减速都来自Webpack,它正在做工作以标记哪些模块未使用。
我以为您可以对开发lodash-es
人员执行lodash
仅对别名进行别名的操作,但这非常hacky,无论如何,Lodash不能与摇树所需的import * as _
语法一起使用lodash-es
我假设这是负责将导入标记为未使用的插件,但是由于默认情况下启用了该插件,所以我不知道如何禁用它或将其从插件数组https://github.com/webpack/中删除webpack / blob / next / lib / optimize / SideEffectsFlagPlugin.js#L1
您似乎无法直接设置treeShaking: false
或在配置中添加内容似乎很奇怪。https://webpack.js.org/guides/tree-shaking/没有提及任何内容。
我们已经设置mode
为构建环境development
或production
基于构建环境,但是即使在开发过程中,我们也会看到这些构建时间较慢。这表明mode: development
不禁用未使用的模块检测。
因此,我的其他回答确实有帮助,但效果不大。虽然它避免了摇树,但这只会使构建将lodash的完整副本内联到每个包中。对于像我们这样的具有100多个入口点的代码库,这仍然非常低效。它使构建速度超过了6分钟,但没有达到原始3分钟的速度。
最后,我过去externals
只在开发人员中才有条件地完全忽略Lodash导入。这可以做到
externals: {
...(isProduction ? {} : { 'lodash-es': '_' }),
},
然后,您将需要编写一些逻辑,以有条件地仅将dev的完整Lodash构建包括在您的head标记中。
因此,这实际上不是这个问题的通用答案-更特定于我们的Lodash用例和非常大的代码库。对于其他代码库或依赖项,禁用树抖动可能是正确的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句