Angular6工作区中库依赖导致构建失败求助
解决Angular 6库依赖构建时"Cannot find module"的问题
你遇到的是Angular CLI库构建流程里的路径解析问题——根项目能正常识别依赖,但库自身的独立编译配置没正确关联到依赖的libB。下面是几个针对性的解决步骤:
1. 修正libA的tsconfig.lib.json配置
根目录的tsconfig.json里的paths不会自动被库的配置继承,每个Angular库都有独立的编译配置文件。你可以二选一操作:
- 让libA的配置继承根配置:在
projects/@scope/liba/tsconfig.lib.json顶部添加:"extends": "../../tsconfig.json" - 或者直接在libA的
tsconfig.lib.json的compilerOptions中添加libB的路径(注意是从libA目录到dist/libB的相对路径):"compilerOptions": { // 保留原有配置... "paths": { "@scope/libb": ["../dist/@scope/libb"] } }
2. 确认libB的package.json字段正确
进入dist/@scope/libb目录,检查package.json里的入口字段是否指向正确的编译输出:
"main": "bundles/libb.umd.js", "module": "fesm5/libb.js", "typings": "libb.d.ts"
这些文件必须存在于dist目录中,否则TypeScript找不到对应的类型定义和模块入口。
3. 用npm link强制本地关联依赖
有时候CLI的路径解析会有延迟,用npm link可以让libA直接引用本地已构建的libB:
- 进入
dist/@scope/libb目录,运行:npm link - 进入
projects/@scope/liba目录,运行:npm link @scope/libb
npm会在本地创建软链接,确保libA能精准找到libB的模块文件。
4. 严格遵循构建顺序
Angular 6 CLI对库的依赖构建顺序要求严格,必须先构建libB,再构建libA:
ng build libb ng build liba
如果颠倒顺序,libA构建时libB的dist文件还未生成,自然会触发模块找不到的错误。
为什么根项目导入libA正常?
根项目使用的是根目录的tsconfig.json,其中的paths配置已经正确指向dist里的libB,而且根项目运行时会自动解析所有依赖的dist文件。但libA的构建基于自身的tsconfig.lib.json,如果这个配置没正确关联libB,就会出现报错。
内容的提问来源于stack exchange,提问作者Neil Stevens
相关产品推荐
相关产品推荐

