从零配置开发与生产构建

从零配置开发与生产构建

这篇笔记还在编辑中,内容可能会继续补充、调整或重写。

本阶段目标

理解开发服务器与生产构建是两条目标不同的链路,并能从入口追踪到最终 HTML、JavaScript、CSS 和静态资源。

建立可观察页面

为项目加入以下内容:

  • 一个从 src/features/tasks/ 导入的列表组件
  • 一张通过 import 引入的图片
  • 一个通过 public/ 原样复制的文件
  • 一个开发环境变量 VITE_API_BASE_URL
  • 一个使用动态 import() 打开的编辑面板

然后执行:

pnpm dev
pnpm build
pnpm preview

在浏览器 Network 面板和 dist/ 中比较两种模式。开发阶段强调快速转换和热更新,生产阶段强调可部署产物、内容哈希、代码分块和缓存。

需要解释的链路

index.html
  → src/main.ts
  → App.vue
  → features/tasks/*
  → CSS、图片与动态模块
  → 带内容哈希的生产产物

不要只截图 dist/。应记录每个产物由哪个入口或动态边界产生,以及修改源码后哪些文件哈希发生变化。

环境变量边界

所有进入客户端产物的值都对用户可见。将一个明显的占位值写入 VITE_API_BASE_URL,构建后在产物中搜索它,亲自验证环境变量不是秘密存储。

为环境变量增加类型声明和启动时校验,缺失时应尽早失败,而不是等到首次请求才暴露问题。

故障演练

  1. 写错动态导入路径,比较开发时和构建时的错误。
  2. 把不支持的值当作客户端秘密注入,确认它会出现在产物中。
  3. 直接双击 dist/index.html,理解为什么生产产物仍需要正确的 HTTP 服务和路由回退。

验收标准

  • 能画出一个源码模块到生产 Chunk 的路径
  • 修改异步模块时,只有相关产物哈希发生变化
  • 缺少必要环境变量时,开发和构建会给出明确错误
  • README 说明 devbuildpreview 的用途和局限
  • dist/ 中没有令牌、私钥或内部敏感配置

下一篇:接入代码规范与 Git Hooks