Angular库处于--watch模式时,应用无法找到其内部依赖
解决方案
1. 配置库的依赖与打包规则
修改库文件夹下的package.json(而非工作区的),将内部依赖移到自身的dependencies,并添加ng-packagr配置强制打包这些依赖:
{ "name": "my-lib", "version": "1.1.0", "dependencies": { "dep": "^3.0.8", "ts-lib": "^2.6.2" }, "ngPackage": { "bundleDependencies": ["dep", "ts-lib"], "allowedNonPeerDependencies": ["dep", "ts-lib"], "lib": { "entryFile": "src/public-api.ts" } } }
bundleDependencies:让ng-packagr将指定依赖的代码直接打包进库的最终bundle,避免应用需要单独安装它们。allowedNonPeerDependencies:消除构建时关于非peer依赖的警告。
同时移除工作区package.json中这两个依赖,仅保留库的peerDependencies和开发依赖。
2. 启用应用的符号链接解析
修改应用的angular.json,在build和serve配置中添加preserveSymlinks: true,确保应用解析模块时跟随软链接到库的目录:
"projects": { "your-app-name": { "architect": { "build": { "options": { "preserveSymlinks": true, // 其他现有配置 } }, "serve": { "options": { "preserveSymlinks": true, // 其他现有配置 } } } } }
3. 确保依赖完全封装
检查库的public-api.ts,禁止导出任何来自内部依赖的类型、组件或模块,所有对外暴露的API必须使用库自身定义的类型,避免应用需要依赖的类型定义文件。
4. 本地开发流程调整
- 库端:
- 执行
npm ci安装依赖 - 运行
ng b --watch构建库(依赖会被打包进dist目录)
- 执行
- 应用端:
- 确保
package.json中已移除dep和ts-lib依赖 - 执行
npm install ../path/to/your-lib/dist(替换为实际路径)创建软链接 - 运行
ng s启动应用
- 确保
额外排查点
- Windows下创建软链接需要管理员权限或开启「开发者模式」,否则可能导致链接失效。
- 确认库的dist目录中生成的package.json包含
dependencies字段(ng-packagr会自动同步),但由于已打包依赖,应用安装时不会额外下载它们。
内容的提问来源于stack exchange,提问作者Keith Glass
相关产品推荐
相关产品推荐

