Angular Monorepo中无法从同级库导入模块问题求助
Angular Monorepo + Lerna 6 跨库依赖编译失败修复方案
问题根源
编译报错TS2307: Cannot find module '@ui-lib/core'的本质是:TypeScript无法解析@ui-lib/core的模块路径,结合你的配置,问题出在依赖声明方式、TS路径映射、Lerna构建顺序这三个核心点上。
分步修复
1. 修正依赖声明(移除本地file路径)
npm workspaces会自动管理本地包关联,file:../core这种路径会干扰workspace的包解析逻辑,直接用包名关联即可:
修改projects/ui-lib/charts/package.json的依赖段:
"dependencies": { "@ui-lib/core": "*", // 或者和core包一致的版本号 "tslib": "^2.0.0" }
执行npm install让workspace重新同步依赖。
2. 配置TS路径映射(关键)
Angular库的TypeScript配置必须明确映射@ui-lib/core的路径,否则TS编译器找不到源码/类型文件:
修改projects/ui-lib/charts/tsconfig.lib.json,在compilerOptions中添加paths配置:
{ "compilerOptions": { // 保留原有配置 "paths": { "@ui-lib/core": ["../core/src/lib"] // 指向core的源码目录,Ivy模式下优先用源码 } }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }
若core已提前编译,也可以指向编译后的产物路径:
["../core/dist/core"],但源码路径更适合Monorepo开发阶段。
3. 强制Lerna按依赖顺序构建
Lerna默认并行构建会导致charts先于core编译,必须指定构建顺序:
- 单次构建执行命令:
lerna run build --scope @ui-lib/core --scope @ui-lib/charts --stream
- 长期解决方案:在
lerna.json中添加依赖排序配置(可选):
{ // 原有配置 "command": { "run": { "sort": true // 自动按依赖顺序执行脚本 } } }
4. 校验核心包配置
确认projects/ui-lib/core/package.json的name字段确实是@ui-lib/core,且ng-package.json的dest配置正确(指向../../dist/ui-lib/core),确保编译产物路径符合预期。
验证流程
- 先单独构建core:
ng build @ui-lib/core - 再构建charts:
ng build @ui-lib/charts - 验证通过后,再用Lerna命令批量构建
内容的提问来源于stack exchange,提问作者dapperwaterbuffalo
相关产品推荐
相关产品推荐

