在Webpack 4中禁用摇树

薰衣草

是否有配置选项可禁用Webpack 4中未使用的模块检测?

我们最近从切换lodashlodash-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构建环境developmentproduction基于构建环境,但是即使在开发过程中,我们也会看到这些构建时间较慢。这表明mode: development不禁用未使用的模块检测。

薰衣草

因此,我的其他回答确实有帮助,但效果不大。虽然它避免了摇树,但这只会使构建将lodash的完整副本内联到每个包中。对于像我们这样的具有100多个入口点的代码库,这仍然非常低效。它使构建速度超过了6分钟,但没有达到原始3分钟的速度。

最后,我过去externals只在开发人员中才有条件地完全忽略Lodash导入。这可以做到

    externals: {
        ...(isProduction ? {} : { 'lodash-es': '_' }),
    },

然后,您将需要编写一些逻辑,以有条件地仅将dev的完整Lodash构建包括在您的head标记中。

因此,这实际上不是这个问题的通用答案-更特定于我们的Lodash用例和非常大的代码库。对于其他代码库或依赖项,禁用树抖动可能是正确的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章