小型TypeScript Firebase云函数项目tsc编译耗时372秒如何优化?
核心问题定位
从给出的tsc --extendedDiagnostics输出可以明确,耗时核心与自行编写的业务代码无关:自有TS代码仅123行,但编译流程加载了11万行第三方类型定义,90%以上的耗时都消耗在第三方类型解析、类型检查环节。
可行优化方案
按优先级从高到低操作:
- 开启
skipLibCheck配置
该配置会跳过所有node_modules下第三方类型定义的检查逻辑,仅做类型引用解析,是减少编译耗时最有效的方案,现有tsconfig未开启该配置。 - 限制自动加载的类型包
仅配置typeRoots不会限制类型加载范围,TS会默认加载typeRoots路径下所有类型包,添加types字段仅声明实际用到的类型包,避免加载无用类型:
"compilerOptions": { // 其他现有配置不变 "types": ["node", "firebase-functions", "firebase-admin"] // 按需补充实际用到的类型包 }
- 添加排除目录
明确排除不需要编译的目录,避免TS扫描冗余文件:
{ // 其他现有配置不变 "exclude": ["node_modules", "lib"] }
- 开启增量编译
开发场景下开启增量编译,后续二次编译会复用之前的编译缓存,大幅减少耗时:
"compilerOptions": { // 其他现有配置不变 "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo" }
- 清理冗余依赖
检查package.json的dependencies和devDependencies,删除未使用的依赖、@types类型包,避免无用类型被加载。 - 优化类型导入
避免全量导入Firebase相关模块,尽量使用import type仅导入需要用到的类型,减少类型加载量:
// 优化前 import * as functions from 'firebase-functions' // 优化后 import type { CallableContext } from 'firebase-functions/v1/https'
- 同步升级依赖版本
如果升级TS版本,需同步升级所有@types包、Firebase相关依赖,避免版本不兼容导致的类型递归实例化爆炸问题。
修改后的完整tsconfig参考
{ "compilerOptions": { "module": "commonjs", "noImplicitReturns": true, "noUnusedLocals": true, "outDir": "lib", "sourceMap": true, "strict": true, "target": "es2017", "typeRoots": [ "node_modules/@types" ], "skipLibCheck": true, "types": ["node", "firebase-functions", "firebase-admin"], "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo" }, "compileOnSave": true, "include": [ "src" ], "exclude": ["node_modules", "lib"] }
内容的提问来源于stack exchange,提问作者Scott Fister
相关产品推荐
相关产品推荐

