2022-11-25 14:58:56 +08:00
|
|
|
|
---
|
2023-03-17 11:03:19 +08:00
|
|
|
|
title: 代码分包
|
2022-11-25 14:58:56 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 默认策略
|
|
|
|
|
|
2023-03-17 11:03:19 +08:00
|
|
|
|
为了给页面提供最优的性能,ice.js 默认以路由维度分割代码,每个路由会生成一个独立的 js 和 css(如果有 css 源码),另外默认会根据第三方模块体积自动拆分 `chunk`,有可能会出现多个产物包。
|
2022-11-25 14:58:56 +08:00
|
|
|
|
|
|
|
|
|
## 组件级别的代码分割
|
|
|
|
|
|
|
|
|
|
如果构建产物过大,可以考虑把体积较大的组件进行拆包:
|
|
|
|
|
|
|
|
|
|
```jsx
|
|
|
|
|
import { lazy, Suspense } from 'react';
|
|
|
|
|
// Avatar 组件会被单独拆包
|
|
|
|
|
const Avatar = lazy(() => import('@/components/Avatar'));
|
|
|
|
|
|
|
|
|
|
export default function Home() {
|
|
|
|
|
return (
|
|
|
|
|
<div>
|
|
|
|
|
<Avatar />
|
|
|
|
|
</div>
|
2023-03-17 11:03:19 +08:00
|
|
|
|
);
|
2022-11-25 14:58:56 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 控制三方依赖的分包
|
|
|
|
|
|
2023-03-23 14:42:16 +08:00
|
|
|
|
三方依赖默认根据体积大小进行拆分。如果三方依赖过多,在某些场景下可能出现较多的网络请求,导致页面加载速度过慢,可关闭 [codeSplitting](../basic/config#codesplitting) 配置:
|
2022-11-25 14:58:56 +08:00
|
|
|
|
|
2023-03-23 14:42:16 +08:00
|
|
|
|
```ts title="ice.config.mts"
|
2022-11-25 14:58:56 +08:00
|
|
|
|
import { defineConfig } from '@ice/app';
|
|
|
|
|
|
|
|
|
|
export default defineConfig(() => ({
|
2023-03-23 14:42:16 +08:00
|
|
|
|
codeSplitting: 'page',
|
|
|
|
|
}))
|
2022-11-25 14:58:56 +08:00
|
|
|
|
```
|