Angular多项目下手动导入应用无法引用my-lib的配置排查
Angular 10 多项目手动迁移应用无法引用本地库修复方案
你遇到的Cannot find module 'my-lib'错误,按以下优先级排查遗漏配置即可解决:
- 校验根目录路径映射配置
打开工作区根目录的tsconfig.base.json,确认compilerOptions.paths节点下存在my-lib的映射配置,参考如下正确配置:
同步检查{ "compilerOptions": { // ...其他基础配置 "paths": { "my-lib": [ "dist/my-lib/my-lib", "projects/my-lib/src/public-api" ], "my-lib/*": [ "dist/my-lib/my-lib/*", "projects/my-lib/src/*" ] } } }projects/a-app/目录下的tsconfig.app.json、tsconfig.spec.json:两个文件内不能单独定义paths字段,如果存在自定义paths配置直接删除,避免覆盖从根配置继承的路径映射规则。同时确认两个文件的extends字段值为../../tsconfig.base.json,不要写错相对路径层级导致继承失效。 - 确认本地库已完成构建
Angular CLI生成的本地库不会直接被应用引用源码,首次使用前必须在工作区根目录执行ng build my-lib,生成dist/my-lib目录下的编译产物。b-app能正常引用是因为你之前调试时已经执行过库构建,a-app迁移后如果未重新构建库、或者构建产物被清理,就会触发模块找不到错误。开发调试阶段可以单独开一个终端执行
ng build my-lib --watch,库代码修改后会自动增量编译,不需要手动重复执行构建命令。 - 校验angular.json中a-app的配置指向
打开根目录angular.json,找到projects.a-app节点,确认两个配置项的路径正确:architect.build.options.tsConfig值为projects/a-app/tsconfig.app.jsonarchitect.test.options.tsConfig值为projects/a-app/tsconfig.spec.json
不要指向a-app作为独立项目时遗留的其他tsconfig文件,否则会导致配置继承链断裂。
- 清理缓存验证结果
以上配置全部修正后,按顺序执行清理操作避免缓存干扰:- 删除根目录下
node_modules/.cache文件夹 - 删除工作区及各项目目录下的
.angular缓存文件夹 - 重启IDE的TypeScript语言服务,避免IDE缓存旧的模块解析结果
- 重新执行
ng build my-lib,再运行ng serve a-app验证引用是否正常
- 删除根目录下
内容的提问来源于stack exchange,提问作者georgeos
相关产品推荐
相关产品推荐

