Angular 6工作区内内部库依赖调用失败,编译报TS2307错误如何解决?
解决Angular 6工作区内内部库引用问题
你遇到的这个错误,本质是Angular CLI工作区里内部库的引用需要额外配置依赖关系和TypeScript路径映射,默认情况下TypeScript没法直接识别你用库名导入的内部模块。下面是具体的解决步骤:
1. 确认library1的入口配置正确
首先检查library1的public-api.ts(路径:projects/library1/src/public-api.ts),这个文件是Angular库的标准入口,必须导出你要在library2中使用的模块:
export * from './lib/library1.module';
2. 给library2添加对library1的本地依赖
进入projects/library2目录,打开package.json,在dependencies节点中添加本地依赖声明:
"dependencies": { // 保留原有依赖,新增下面这行 "library1": "file:../library1/dist/library1" }
回到工作区根目录,运行npm install让npm识别并关联这个本地依赖。
3. 配置TypeScript路径映射
打开工作区根目录的tsconfig.json,找到compilerOptions下的paths配置(没有的话就新增这个节点),添加library1的路径映射,让TypeScript能定位到库的源码:
"compilerOptions": { // 保留原有配置,新增下面的paths "paths": { "library1": [ "projects/library1/src/public-api" ], "library1/*": [ "projects/library1/src/*" ] } }
另外,检查projects/library2/tsconfig.lib.json,确保它继承了根目录的tsconfig.json,如果没有继承,就在这个文件里添加同样的路径配置。
4. 按依赖顺序构建库
因为library2依赖library1的构建产物,所以必须先构建library1:
ng build --project=library1
等library1构建完成后,再构建library2:
ng build --project=library2
额外开发提示
- 如果你需要频繁修改两个库的代码,可以用
ng build --project=library1 --watch命令监听library1的变化,它会自动重新构建,这样library2就能实时获取到library1的最新代码。 - 确认
angular.json中projects节点下的library1和library2的name字段,和你导入时用的库名完全一致。
内容的提问来源于stack exchange,提问作者Gaurav Mukherjee
相关产品推荐
相关产品推荐

