Vite 构建配置与 Phaser 分块优化:让 3MB 的产物变成 500KB

举报
yd_296221794 发表于 2026/10/23 22:27:34 2026/10/23
【摘要】 > Vite 的默认配置对 Phaser 不友好——需要手动分块,否则产物会爆炸。## 问题:Phaser 太大了`phaser` 包的大小大约是 3MB(未压缩)。如果把整个 Phaser 打包进一个 `main.js`,产物会非常大——用户第一次打开页面要等几秒钟。NEON RUNNER 2077 的 `vite.config.ts` 里有一个关键配置:```ts// vite.conf...

> Vite 的默认配置对 Phaser 不友好——需要手动分块,否则产物会爆炸。


## 问题:Phaser 太大了


`phaser` 包的大小大约是 3MB(未压缩)。如果把整个 Phaser 打包进一个 `main.js`,产物会非常大——用户第一次打开页面要等几秒钟。


NEON RUNNER 2077 的 `vite.config.ts` 里有一个关键配置:


```ts

// vite.config.ts

build: {

  rollupOptions: {

    output: {

      manualChunks: {

        phaser: ['phaser'],

      },

    },

  },

}

```


这个配置把 Phaser 单独打包成一个 `vendor-phaser.js` 文件,和 `main.js` 分离。


## 手动分块:为什么需要


Vite 的默认分块策略是按模块拆分——每个 npm 包一个 chunk。但 Phaser 是一个大包——它包含场景、物理、输入、补间、纹理、音频等所有模块。如果把整个 Phaser 打包进一个 chunk,用户第一次打开页面要下载 3MB。


`manualChunks: { phaser: ['phaser'] }` 把 Phaser 单独打包成一个 chunk。这个 chunk 可以被浏览器缓存——用户第一次打开页面下载 3MB,第二次打开页面从缓存读取,不需要重新下载。


## 产物结构


构建后,`dist/` 目录的结构:


```

dist/

├── assets/

│ ├── index-xxxx.js # 应用代码(约 50KB)

│ ├── vendor-phaser-xxxx.js # Phaser 引擎(约 3MB)

│ └── index-xxxx.css # 样式(约 2KB)

└── index.html

```


`index.html` 里用 `<script type="module" src="/assets/index-xxxx.js">` 加载应用代码,而 `index-xxxx.js` 里用 `import` 语句加载 `vendor-phaser-xxxx.js`。浏览器会并行下载两个 chunk。


## base: './':相对路径部署


`vite.config.ts` 里的 `base: './'` 确保产物使用相对路径:


```ts

export default defineConfig({

  base: './',

  // ...

});

```


这个配置让 `dist/` 目录可以被双击 `index.html` 直接打开,不需要起 HTTP 服务器。如果 `base` 是默认的 `'/'`,产物会使用绝对路径——双击 `index.html` 时,浏览器会尝试从根路径加载资源,导致 404。


## devServer 端口:5173


```ts

server: {

  port: 5173,

  open: true,

},

```


`open: true` 让开发服务器启动时自动打开浏览器。端口 5173 是 Vite 的默认端口——不需要改。


## 构建命令:tsc && vite build


`package.json` 里的 `build` 脚本:


```json

"build": "tsc && vite build"

```


`tsc` 先做类型检查,`vite build` 再做构建。如果类型检查失败,构建不会继续——这是"类型安全"的最后一道防线。


## 下一章预告


Vite 构建配置讲完了。最后一章,我会做一个**项目总结**——从零到可玩的霓虹射击游戏,我们学到了什么。


> 构建配置的核心原则:**产物要小,部署要简单**。3MB 的 Phaser 可以接受,但应用代码要控制在 100KB 以内。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。