麦式参考 MickerBook Reference

构建

Build

也常被叫作:打包编译上线前处理把代码变成能跑的东西

你可能会这么说

「我写的代码怎么变成那个能打开的网站?中间那一步叫啥?」

构建 Build

把一堆源码文件处理压缩成浏览器能直接跑的静态文件,是上线前必经的一步。

你在开发时看到的网页,和真正上线时服务器上放的网页,常常不是同一批文件。开发时为了方便调试,源码是散的、可读的、有注释的;而上线时浏览器要的是体积小、加载快的成品。把源码处理成成品这一步,就叫构建。处理的内容包括:把几十个文件合并打包、把代码压缩成一行、把图片压缩、把高级语法翻译成老浏览器也认的写法。

构建的命令通常在项目里叫 npm run build(前端项目常见)或 build,执行完会生成一个 distbuild 目录,里面才是真正要传上服务器的文件。所以判断一个人懂不懂「上线」,很简单:如果他说的上线是「把源码传上去」,那八成是错的——你得先把源码构建成 dist,再把 dist 传上去。

构建和开发模式(npm run dev)是两回事。dev 模式为了让你改一行立刻看到效果,故意不做压缩、还额外塞了调试代码;构建则是反着来的。所以「本地能跑」完全不能证明「构建能成功」——构建失败很常见,错误通常写在终端里,比如某个文件没找到、某个语法不支持。

长什么样 真实可交互,不是截图

源码 src/npm run builddist/ 成品上传到服务器
$ npm run build

> my-site@1.0.0 build
> vite build

vite v6.0.0 building for production...
transforming...
✓ 128 modules transformed.
dist/index.html                 0.54 kB
✓ built in 3.2s
构建成功dist/ 已生成

构建成功会明确列出生成的文件;如果终端里只有「Command not found」或一屏红色报错,就是没构建成功,别当成成功。

拆开看,里面有这几块

  1. 1
    构建命令 Build script

    一般是 npm run build,在 package.json 的 scripts 里定义。执行它就产出成品目录。

  2. 2
    打包工具 Bundler

    负责把零散文件合并压缩,常见的有 Vite、Webpack。它在后台干活,你不用懂它细节。

  3. 3
    成品目录 Output dir

    默认叫 distbuild,里面才是要部署的文件。目录不存在 = 还没构建。

  4. 4
    环境区分 Environment

    构建时会读环境变量,决定调哪个接口、开不开测试开关。同一个源码可以构建出开发/预发/生产三种成品。

  5. 5
    产物哈希 Hashed filenames

    构建出的文件名常带一串乱码(如 app.a1b2c3.js),内容变了文件名就变,方便浏览器刷新缓存。

常见的有哪几种

开发模式Dev

不压缩、带调试信息、改动即时生效。

用在:本地边写边看

生产构建Production build

压缩、去注释、优化性能,文件名带哈希。

用在:上线前必做

预发构建Staging build

用预发环境配置做的生产级构建。

用在:上线前模拟验证

容易搞混?这样区分

构建 部署 Deployment

构建是把源码变成成品(本地一步就能完成);部署是把成品放到线上并让它跑起来。顺序是:先构建,后部署。经常被人合起来说成「上线」,但验的时候要分开验。

看 部署
构建 压缩 Minification

压缩只是构建里的一小步(把代码变短变小)。构建是整个过程:打包、压缩、翻译语法、加哈希全在里面。说「我压缩过了」不等于「我构建过了」。

什么时候用得上

上线前检查

改了代码后,本地 npm run build 先跑一次,绿灯再往上走。构建失败别碰部署。

环境配置

构建时读环境变量,区分开发/生产接口地址。构建出的成品决定了线上调谁。

确认成品

部署前先看 dist/ 目录是否真的生成了,里面是不是最新内容,再传上去。

你可以这样跟 AI 说

直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。

【任务】把当前项目的生产版构建跑通
【范围】只运行构建,不改源码逻辑、不加依赖、不做无关重构
【目标】
  - 执行生产构建命令,直到**成功结束、没有报错**
  - 明确告诉我:构建命令是什么、生成到了哪个目录(通常是 dist/)
  - 如果构建失败,把**终端里第一条报错**原样贴出来,不要只写「构建失败」
【边界】不要动 package.json 的 scripts、不要换打包工具、不要为了过构建去删代码或注释掉检查
【交付】构建成功的完整命令输出 + 生成目录里有哪些文件。如果你需要环境变量,先列出你要哪些、给什么值,等我确认

这段的关键是「贴第一条报错」——构建失败时模型容易只复述结果不给你看原因,导致你无法判断它到底是修好了还是绕过去了。

它说「做好了」,你怎么自己验

这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「运行时」这层:真的跑起来了,能在本机看到结果。

要亲眼看到这些,才算数

  • 在你机器上真的执行一次 npm run build(或它告诉你的命令),看到终端以成功结束,不是只在聊天里说成功。
  • 检查生成目录(如 dist/真实存在,且文件修改时间是刚才,不是很久以前留下的旧文件。
  • 看输出的文件列表里,有没有带哈希乱码的文件名(如 app.xxxx.js)——有说明是正经生产构建。
  • 随便打开 dist/ 里一个 HTML/JS 文件看两眼,确认是被压缩过的成品,而不是源码原样。

它常这么糊弄你

  • 「构建成功了」——但终端根本没跑,或报错被它吞了。要求贴完整命令输出。
  • 说「已构建」,但 dist/ 目录不存在或是一堆旧文件。看文件时间戳。
  • 为了快速过,把某个报错的文件注释掉或删掉。这会让线上缺功能。
  • 把开发模式(npm run dev)的运行结果说成「构建成功」。两个命令完全不同,产物也不同。

构建这一步最高能验到「运行时」:在你机器上命令真实跑通、产物真实生成。它和「部署上线」是两件事,构建成功只代表这一步过了,不代表网站已经在线上。

考考你 选一个你觉得对的

AI 说「已经构建好了,可以部署了」。你想确认构建真的成功了,最该先看什么?