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

如何将项目根目录外的TypeScript公共文件夹纳入构建并配置路径别名

多TypeScript项目共享公共目录并保留独立输出结构的实现方案

问题说明

同一仓库下存在两个TypeScript项目(project1、project2),需共享根目录下的/common文件夹(含辅助类、DB模型),无需将common封装为独立库。使用paths或rootDirs默认配置时,输出根目录会被设为仓库根路径,现要求保持各项目自身为输出根,同时将/common编译到每个项目的根目录下,通过路径别名实现模块导入。

输入目录结构:

/project1/**/*.ts
/project2/**/*.ts
/common/**/*.ts

期望输出结构:

  • project1输出:
/project1/**/*.js
/project1/common/**/*.js
  • project2输出:
/project2/**/*.js
/project2/common/**/*.js

具体实现步骤

1. 为每个项目配置独立的tsconfig.json

在project1和project2目录下分别创建tsconfig.json,核心配置如下:

project1/tsconfig.json

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "CommonJS",
    "outDir": "./", // 将输出根目录设为当前项目目录
    "rootDir": "../", // 根目录指定为仓库根,确保能包含common和当前项目文件
    "baseUrl": "./",
    "paths": {
      "@common/*": ["common/*"] // 别名映射到输出后的common目录
    },
    "strict": true,
    "declaration": true
  },
  "include": [
    "../common/**/*", // 引入公共目录的所有文件
    "./**/*" // 引入当前项目的所有文件
  ],
  "exclude": [
    "../project2/**/*" // 排除另一个项目的文件,避免编译冗余
  ]
}

project2/tsconfig.json

配置与project1基本一致,仅需修改exclude字段为"../project1/**/*"即可。

2. 代码中使用别名导入公共模块

在项目的TypeScript文件中,通过别名@common导入/common下的模块:

// project1/src/index.ts
import { UserModel } from '@common/models/user';
import { formatDate } from '@common/utils/helpers';

3. 编译项目

分别进入两个项目目录执行编译命令:

# 编译project1
cd project1 && tsc

# 编译project2
cd project2 && tsc

编译完成后,common目录的代码会被编译到对应项目的common文件夹下,项目自身代码保持原有目录结构输出,完全符合预期的输出格式。

可选优化:批量编译脚本

在仓库根目录的package.json中添加编译脚本,实现一键编译两个项目:

{
  "scripts": {
    "build:project1": "cd project1 && tsc",
    "build:project2": "cd project2 && tsc",
    "build:all": "npm run build:project1 && npm run build:project2"
  }
}

执行npm run build:all即可完成两个项目的编译。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:52:38