Angular构建含本地引用的库时出现'rootDir'错误求助
解决Angular库本地引用的'rootDir'构建错误
核心原因
TypeScript的rootDir配置要求所有编译的源文件必须在该目录下。当lib2引用同级的lib1源码时,lib1的文件不在lib2默认的rootDir(通常是./src)范围内,因此触发构建错误。
具体解决步骤
1. 确保lib1的tsconfig开启复合模式
打开lib1的tsconfig.lib.prod.json,在compilerOptions中添加"composite": true,项目引用依赖该配置追踪依赖关系:
{ "extends": "./tsconfig.lib.json", "compilerOptions": { "declarationMap": false, "composite": true }, "angularCompilerOptions": { "compilationMode": "partial" } }
2. 调整lib2的tsconfig配置
修改lib2的tsconfig.lib.prod.json(即你提供的配置文件):
- 在
compilerOptions中添加"rootDir": "../",将根目录设为两个库的共同父目录,确保覆盖lib1和lib2的所有源文件 - 保留
outDir为当前库的输出目录(比如默认的./dist),避免与lib1的输出冲突
修改后的配置示例:
/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "extends": "./tsconfig.lib.json", "compilerOptions": { "declarationMap": false, "rootDir": "../", "composite": true }, "angularCompilerOptions": { "compilationMode": "partial" }, "references": [{"path": "../lib1/tsconfig.lib.prod.json"}] }
3. 配置Angular构建依赖
打开项目根目录的angular.json,找到lib2的build配置,添加dependsOn确保构建lib2前先完成lib1的构建:
"projects": { "lib2": { "architect": { "build": { "options": { // 原有配置 "tsConfig": "./projects/lib2/tsconfig.lib.prod.json" }, "dependsOn": ["lib1:build"] } } } }
4. 清理缓存并重新构建
执行以下命令清理旧构建文件并重新编译:
ng clean ng build lib2
内容的提问来源于stack exchange,提问作者Ghennadii Dovgani
相关产品推荐
相关产品推荐

