面试官:npm run build 到底干了什么?从 package.json 到 dist 的 7 步拆解

本文以 Vite + Vue3 为例,逐行跟踪 npm run build 的全过程,附 1 张流程图 + 关键日志,看完能 30 秒答完面试。


一、总览:7 步流水线

text 复制代码
1. 读取 package.json → 2. 解析 build 脚本 → 3. Vite 打包 → 4. 代码分割 → 5. 压缩混淆 → 6. 生成 dist → 7. 输出报告

二、逐行拆解(以 Vite 为例)

① 读取 package.json

json 复制代码
"scripts": {
  "build": "vite build"
}

npm run build → 执行 vite build 命令。


② 解析 build 脚本

bash 复制代码
$ vite build

Vite CLI 被拉起,加载 vite.config.js 配置。


③ Vite 打包(Rollup 内核)

js 复制代码
// vite.config.js
export default defineConfig({
  plugins: [vue()],
  build: {
    rollupOptions: {
      output: {
        manualChunks: { vendor: ['vue'] } // 代码分割
      }
    }
  }
});
  1. 解析 入口 → 2. 分析 依赖 → 3. 生成 AST → 4. 转译 TS/JS → 5. Tree-Shaking 无用代码。

④ 代码分割

输出目录:

arduino 复制代码
dist/
├─ assets/
│  ├─ index.a1b2.js      // 业务代码
│  ├─ vendor.3c4d.js     // 第三方库
│  └─ index.e5f6.css     // 样式
└─ index.html            // 注入资源路径

⑤ 压缩混淆

  • Terser:压缩 JS(去掉空格、重命名变量)。
  • CSSO:压缩 CSS。
  • 图片压缩:webp/avif 转换。

⑥ 生成 dist

bash 复制代码
vite build
✓ 3 modules transformed.
dist/index.html              0.46 kB │ gzip: 0.29 kB
dist/assets/index.a1b2.js    45.21 kB │ gzip: 15.30 kB
dist/assets/vendor.3c4d.js   128.90 kB │ gzip: 45.20 kB

生成 哈希文件名,实现强缓存。


⑦ 输出报告

bash 复制代码
Build completed in 1.23s

可选开启 --report 查看包体积分析。


三、面试 30 秒回答模板

"npm run build 先读 package.json 找到 vite build,Vite 用 Rollup 打包:入口解析 → 依赖分析 → Tree-Shaking → 代码分割 → 压缩混淆 → 输出带哈希的 dist,整个过程 1-2 秒完成。"

相关推荐
xiaoqi92220 分钟前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233221 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头88212 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1362 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠3 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
2601_949833393 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
珑墨3 小时前
【Turbo】使用介绍
前端
军军君014 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
xiaoqi9225 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos
打小就很皮...5 小时前
Tesseract.js OCR 中文识别
前端·react.js·ocr