NX问题:存在同级库依赖时库构建失败
问题
我有一个NX单仓库工作区,开发了带分组文件夹的库"A",包含x、y、z三个领域特性,可通过nx build @A/x(替换x为其他子文件夹)单独构建。另外还有带分组文件夹的库"B"(包含r、s、t子文件夹),该库依赖于库"A"。
构建库"B"时,出现大量如下错误:
error TS6059: File '<my-project>/libs/<A-grouping-folder>/<x-folder>/src/lib/<some-file>' is not under 'rootDir' '<my-project>/libs/<B-grouping-folder>/<r-subfolder>/src'. 'rootDir' is expected to contain all source files.
当前tsconfig.base.json内容如下:
{ "compileOnSave": false, "compilerOptions": { "rootDir": ".", "sourceMap": true, "declaration": false, "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, "importHelpers": true, "target": "es2015", "module": "esnext", "lib": ["es2017", "dom"], "skipLibCheck": true, "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { "@A/x": ["libs/A/x/src/index.ts"], "@A/y": ["libs/A/y/src/index.ts"], "@A/z": ["libs/A/z/src/index.ts"], "@B/r": ["libs/B/r/src/index.ts"], "@B/s": ["libs/B/s/src/index.ts"], "@B/t": ["libs/B/t/src/index.ts"] }, "suppressImplicitAnyIndexErrors": true, "strictPropertyInitialization": false, "allowSyntheticDefaultImports": true, "noImplicitAny": false, "strictNullChecks": false, "noImplicitReturns": false }, "exclude": ["node_modules", "tmp"] }
工作区无angular.json和workspace.json,两个库的各自src/lib文件夹下都有project.json文件。想知道操作哪里有误,以及解决思路。
解决思路
- 检查库B的project.json配置:重点查看
build目标中的rootDir配置,大概率是库B的构建配置单独指定了rootDir为自身的src目录,导致TypeScript要求所有依赖文件都必须在该目录下。需将库B构建配置里的rootDir改为与根tsconfig.base.json一致的.,或者直接移除该配置,让它继承根配置。 - 先构建依赖库A的所有特性:NX中依赖库需要先完成构建,依赖它的库才能引用编译后的产物而非源码。执行
nx run-many --target=build --projects=@A/x,@A/y,@A/z构建所有A库的特性,之后再构建库B。 - 检查库B子文件夹的tsconfig配置:如果库B的子文件夹下有独立的
tsconfig.json,确认它是否正确继承了根tsconfig.base.json,且没有覆盖rootDir属性。正确的继承需在extends字段中指定对应路径,比如../../../../tsconfig.base.json(根据实际目录层级调整)。 - 修正paths映射的语法问题:根
tsconfig.base.json中paths最后一项末尾的多余逗号建议移除,虽然部分JSON解析器允许,但可能引发潜在的配置识别问题。
内容的提问来源于stack exchange,提问作者smartmouse
相关产品推荐
相关产品推荐

