Jeffrey · Chiang

跨仓库类型共享

前端typescript类型定义文件跨git仓库共享方案

跨仓库类型共享

1. 创建在线仓库

先创建一个独立的 Git 仓库(如 git@github.com:org/shared-types.git),专门存放 .ts 定义。 目录结构:

app-types/
├── index.ts        # 导出所有类型
├── models/         # 具体的业务模型
└── package.json    # 定义包名,如 "name": "@shared/types"

2. 在需要共享的(子)应用中添加子模块

在各自的仓库根目录下运行:

# 将类型仓库添加为子模块,存放路径建议统一
git submodule add git@github.com:org/shared-types.git src/shared-types

此时,你的项目目录下会多出一个 src/shared-types 文件夹。

3. 配置typescript 识别路径

为了在代码中通过 @shared/types 优雅地引入,需要修改 tsconfig.json

{
  "compilerOptions": {
    "paths": {
      "@shared/types": ["./src/shared-types/index.ts"]
    }
  }
}

4. 解决pnpm依赖识别

虽然文件在物理路径上了,但 pnpm 默认不认识它。由于你没有 Monorepo,最快的方法是在 package.json 中使用 link:file: 协议:

// package.json
"devDependencies": {
  "@shared/types": "link:./src/shared-types"
}

执行 pnpm install 后,你就可以在代码里直接写:

import { HeaderProps } from '@shared/types';

5. 日常维护使用流程

5.1. 更新

在各子应用src/shared-types目录下增删改后git push

5.2. 同步

在各子应用目录下运行:

git submodule update --remote --merge

5.3. 多人协作

其他人克隆项目时,依次执行:

git clone --recursive <project-url>
# 或者克隆后执行
git submodule update --init --recursive