You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 本地开发流程调整

  1. 库端:
    • 执行npm ci安装依赖
    • 运行ng b --watch构建库(依赖会被打包进dist目录)
  2. 应用端:
    • 确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:47:09