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

如何在两个Angular项目间共享需Ivy全编译的公共模块?

针对Angular Ivy模块共享的解决方案

针对你的需求,这里有几个无需重构代码、保留Ivy编译要求的可行方案:

方案1:本地链接+Ivy编译配置

  • 配置公共模块:在公共模块的tsconfig.lib.json中确保"enableIvy": true,并在angular.json的build节点里指定固定输出路径(如dist/my-shared-lib)。
  • 启动实时编译:执行ng build my-shared-lib --watch,修改公共模块代码时会自动重新编译为Ivy格式。
  • 主项目链接模块:在主项目目录执行npm link ../path-to-shared-lib/dist/my-shared-lib(替换为你的公共模块编译输出路径),主项目即可直接使用编译后的Ivy模块,调试时修改公共模块代码会实时同步。
  • 优劣:无需发布仓库,调试流畅,保留原有结构;但团队协作需每个人本地配置,适合小团队或临时场景。

方案2:Git子模块嵌入

  • 添加子模块:在主项目目录执行git submodule add <私有仓库地址> src/app/shared(路径可自定义)。
  • 配置路径映射:在主项目的tsconfig.json的compilerOptions.paths中添加:
    "@my/shared/*": ["src/app/shared/*"]
    
  • 主项目编译时,Ivy编译器会直接编译子模块源码,满足完整Ivy编译要求。
  • 优劣:无需发布NPM包,版本独立可控;但子模块版本更新需手动同步,分支切换时可能需重新初始化子模块。

方案3:Monorepo重构(Nx/Angular Workspaces)

  • 创建Monorepo:执行npx create-nx-workspace my-workspace(或ng new my-workspace --create-application=false)。
  • 迁移项目:将两个现有项目作为applications迁移到Monorepo,公共模块作为library导入(执行ng generate library my-shared-lib后复制代码)。
  • 引用模块:主项目通过import { xxx } from '@my/workspace/my-shared-lib'引用,构建时统一用Ivy编译所有模块。
  • 优劣:长期维护友好,支持增量构建、统一版本管理;但需迁移现有项目,初期有配置成本,适合长期维护的场景。

这些方案均无需重构你的Ivy代码,完全保留原有模块化结构,同时满足调试与共享需求,可根据团队规模、维护周期选择适配方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:13:16