带有延迟加载问题的 webpack 树抖动

Posted

技术标签:

【中文标题】带有延迟加载问题的 webpack 树抖动【英文标题】:webpack tree shaking with Lazy loading question 【发布时间】:2021-04-20 09:34:31 【问题描述】:

所有,我是 Webpack 的新手。目前,我面临一个关于 webpack 摇树的问题。在 CommonJS 中,由于 require 语法,webpack 无法进行树摇动。例如,程序可以通过以下方式导入包,但无法进行 tree-shaking,

var a;
if(condition)
    a = require('module1');
else
    a = require('module2');

那么,tree shaking 是基于 ES6 模块中的 import 静态语法,无法动态导入包。

然而,在 es7 中,有一种动态方式通过 延迟加载 import (module) 加载模块。所以,我的问题是,如果程序包含延迟加载语法,tree shaking 是否仍然有效,如果 webpack 可以做到这一点,这是如何实现的?

【问题讨论】:

【参考方案1】:

据我所知,没有编译器/捆绑器支持 tree shaking 动态导入的模块。 Webpack 5 在删除动态加载的包中未使用的代码方面可能会稍好一些。

但是你可以用旧的方式来做;创建两个 html 站点,共享一个 JS 包和特定于页面的包,然后链接到另一个页面。

【讨论】:

以上是关于带有延迟加载问题的 webpack 树抖动的主要内容,如果未能解决你的问题,请参考以下文章

使用 Webpack 2 延迟加载 Vue 组件

在 React 项目中使用 System.import 进行 Tree Shaking 和延迟加载的 Webpack 2 配置

延迟加载孩子,里面有急切的集合

使用 webpack 和 react-router 进行延迟加载和代码拆分不加载

当我导航到主包未加载的嵌套路由时使用 React.js 延迟加载

Vue2 - 路由级别的延迟加载不起作用?