NX工作区Angular服务库导入其他库时构建报错TS6059
问题场景
在NX工作区中,将AdministrationComponent迁移至libs/shared/administration库、AdminService迁移至libs/shared/adminService库后,nx serve app运行正常,但执行构建时触发TS6059错误,提示administration库的index.ts不在adminService库的rootDir下;移除服务中的导入语句后构建恢复正常。
问题原因
TS6059错误本质是TypeScript编译时的rootDir校验问题:NX中每个库都有独立的编译上下文,当跨库导入时如果依赖配置或导入方式不正确,TypeScript会误将其他库的文件判定为当前库rootDir下的文件,触发校验失败。而开发服务(nx serve)模式下TypeScript的校验规则更宽松,因此不会暴露该问题。
解决方案
正确声明库间依赖
使用NX命令为adminService库添加对administration库的依赖,确保工作区识别两者的依赖关系:nx g @nrwl/workspace:library-dep --project adminService --dependency administration或手动在
libs/shared/adminService/project.json的dependencies字段中添加:"dependencies": { "@your-workspace/shared/administration": "*" }验证TypeScript路径配置
检查根目录tsconfig.base.json的paths字段,确保两个库的别名配置正确(替换your-workspace为实际工作区名称):"paths": { "@your-workspace/shared/administration": ["libs/shared/administration/src/index.ts"], "@your-workspace/shared/adminService": ["libs/shared/adminService/src/index.ts"] }检查库的tsconfig配置
打开libs/shared/adminService/tsconfig.lib.json,确认rootDir设置为当前库的源码目录:"compilerOptions": { "rootDir": "./src", // 其他配置... }避免将
rootDir设置为上级目录,防止TypeScript将其他库的文件纳入当前编译范围。使用库别名而非相对路径导入
在AdminService中使用工作区别名导入组件,而非相对路径:// 正确写法 import { AdministrationComponent } from '@your-workspace/shared/administration'; // 错误写法(会触发TS6059) import { AdministrationComponent } from '../../administration/src';清理NX缓存
运行以下命令清理工作区缓存,避免缓存导致的配置不生效问题:nx reset
内容的提问来源于stack exchange,提问作者Nico Schuck

