JavaScript代码分割主要依靠动态import()和打包工具配合,按需加载模块并生成独立chunk;支持路由懒加载(React.lazy+Suspense)、自动公共依赖提取及prefetch预加载优化体验。
JavaScript实现代码分割主要依靠动态导入(import())和打
包工具的配合,核心是把大块代码拆成小块,在需要时才加载。
import() 按需加载模块这是现代 JavaScript 原生支持的方式,返回一个 Promise,适合路由、按钮点击、条件逻辑等场景。
const module = await import('./utils.js'); 或 import('./chart.js').then(m => m.render())
/* webpackChunkName: "charts" */
单页应用中最常见的分割场景,避免一次性加载全部页面逻辑。
React.lazy() 包裹动态导入的组件:const Home = React.lazy(() => import('./Home'));
显示加载状态:
React.lazy + import() 同样生效;Webpack 需确保已启用 experiments.asyncWebAssembly(旧版)或默认支持工具能自动提取公共依赖、第三方库或按大小/重复度拆分,减少手动干预。
optimization.splitChunks 中设置 chunks: 'all'、minSize、cacheGroups(如单独抽离 node_modules)build.rollupOptions.output.manualChunks,可自定义分组,例如把 lodash 和 axios 放进 vendor
在用户可能访问前悄悄加载资源,让后续操作更流畅。
import('./module.js').then(...) 是“按需加载”,而 import('./module.js').then(...).catch(...) 后可加 prefetch 注释(Webpack)import.meta.preload() 主动触发预加载 也可手动生成,适合确定性高的路径(如登录后大概率进仪表盘)