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

如何将Nx工作区中本地TS依赖代码纳入Angular库编译产物?

解决Angular库打包时纳入本地共享库代码的方案

1. 配置ng-packagr的依赖规则

在主Angular库的ng-package.json文件中,明确指定哪些依赖需要被打包进产物,哪些是外部依赖:

{
  "allowedNonPeerDependencies": ["@myOrg/sharedLib"],
  "externalDependencies": ["@angular/core", "@angular/common", "rxjs"], // 仅保留真正需要用户自行安装的第三方依赖
  "lib": {
    "entryFile": "src/index.ts",
    "umdModuleIds": {
      "@myOrg/sharedLib": "myOrg-sharedLib" // 避免UMD打包时的命名冲突
    }
  }
}
  • allowedNonPeerDependencies:将本地共享库加入白名单,允许ng-packagr把它的代码合并到主库产物中
  • externalDependencies:列出需要用户单独安装的外部依赖,排除共享库

2. 修正主库的TypeScript配置

确保主库的tsconfig.lib.json中paths配置正确,且未排除共享库代码:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@myOrg/sharedLib": ["../shared/src/index.ts"]
    },
    "declaration": true,
    "preserveSymlinks": true
  },
  "exclude": ["node_modules", "src/test.ts", "src/**/*.spec.ts"]
}
  • 不要把共享库路径加入exclude列表,保证TypeScript能正确解析并编译共享库代码

3. 调整Nx的Build配置

在主库的project.json中,修改build任务参数,确保Nx不会将共享库当作外部依赖处理:

{
  "targets": {
    "build": {
      "executor": "@nx/angular:package",
      "options": {
        "project": "libs/main-lib/ng-package.json",
        "externalDependencies": ["@angular/core", "@angular/common"], // 与ng-package.json的配置保持一致
        "tsConfig": "libs/main-lib/tsconfig.lib.json"
      }
    }
  }
}

4. 验证打包结果

执行Nx的build命令:

nx build main-lib

检查dist/libs/main-lib目录下的产物(如esm、umd文件夹),确认共享库的代码(比如someUtilFn)已经被包含在主库的编译文件中,而非作为外部依赖引用。

额外注意事项

  • 不要在主库的index.ts中导出共享库内容(如export * from '@myOrg/sharedLib'),防止用户能直接从主库导入共享库代码
  • 确保共享库的tsconfig.json开启了declaration选项,方便主库生成正确的类型定义

内容的提问来源于stack exchange,提问作者spierala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:09:56