思考🤔:我在 apis 项目中执行 pnpm init 时,package.json 文件中的 "scripts": { "build": "tsc" } 让我好奇为什么这里的 build 使用的是 tsc。之前在其他项目中看到的 build 命令有很多不同的写法,因此想了解它们的区别。
在 package.json 的 scripts 里,build 脚本的不同写法代表不同的构建行为。下面分别解释几种常见的 build 命令:
1️⃣ "build": "tsc"
👉 直接使用 TypeScript 编译器 (tsc) 进行构建。
适用场景:
- 纯 TypeScript 代码库(如
packages/apis),无需打包,只需将.ts文件编译为.js和.d.ts类型声明文件。
执行方式:
pnpm run build # 运行 TypeScript 编译
执行结果:
src/*.ts被编译到dist/*.js- 生成
.d.ts类型文件(如果tsconfig.json里开启了"declaration": true)
2️⃣ "build": "tsc && vite build"
👉 先用 TypeScript (tsc) 编译,然后再用 Vite 进行打包。
适用场景:
- 用 Vite 构建前端项目(如 Vue/React)。
- 需要 TypeScript 预编译后,再由 Vite 进行优化打包。
执行方式:
pnpm run build # 先运行 tsc,再运行 vite build
执行过程:
tsc先编译 TypeScript 代码,检查类型,并输出.js文件。vite build读取vite.config.ts,执行 Vite 的打包流程,生成最终的前端静态资源(如dist/目录)。
3️⃣ "build": "tsc --watch"
👉 以 监听模式 运行 TypeScript 编译,文件变更时自动重新编译。
适用场景:
- 在本地开发 API 或工具库时,实时编译 TypeScript 代码,避免手动执行
build。
执行方式:
pnpm run build # 监听文件变化,自动重新编译
执行效果:
- 代码修改后,
tsc立即重新编译,方便调试。
4️⃣ "build": "vite build"
👉 直接使用 Vite 进行构建,适用于前端项目。
适用场景:
- 纯前端项目(Vue/React)。
- TypeScript 已由 Vite 处理,无需
tsc额外编译。
执行方式:
pnpm run build # 使用 Vite 进行构建
执行效果:
- 生成
dist/目录,包含打包后的静态资源。
💡 总结
build 方式 | 适用场景 | 作用 |
|---|---|---|
"tsc" | 纯 TypeScript 库 | 仅编译 TS 代码,输出 .js 和 .d.ts |
"tsc && vite build" | TS + Vite 前端项目 | 先编译 TS,再用 Vite 进行构建 |
"tsc --watch" | 本地开发工具库 | 监听 TS 代码变化,自动编译 |
"vite build" | 纯 Vite 前端项目 | 直接使用 Vite 进行打包 |
如果你的 apis 只是一个 TypeScript API 库,建议使用:
"build": "tsc"
如果是前端 Vue/React 项目,建议:
"build": "tsc && vite build"
我的项目apis 包是一个 API 工具库,所有build: "tsc" 就足够了 🚀。