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

Monorepo中如何独立管理CRA、Fastify项目的ESLint和TS配置

同仓管理前后端TS项目的配置方案

实践合理性说明

直接把前后端两个文件夹放在同一个仓库完全不属于不当实践,这是中小规模全栈项目非常普遍的「轻量Monorepo」方案,相比多仓反而有跨端共享类型、统一CI/CD流程、一次拉取全量代码的优势,完全符合开发规范。

配置管理方案

目录结构参考

先给出最基础的迁移后目录结构,不需要改动原有项目的内部结构:

项目根目录/
├── client/          # 原CRA前端仓库的全部内容
│   ├── package.json
│   ├── tsconfig.json
│   └── .eslintrc.json
├── server/          # 原Fastify后端仓库的全部内容
│   ├── package.json
│   ├── tsconfig.json
│   └── .eslintrc.json
└── package.json     # 根目录可选配置,用来存全局脚本、公共依赖

Typescript配置管理

你可以根据需求选择两种方案:

  • 完全独立配置:直接保留两个项目原有各自的tsconfig.json即可,现有主流IDE(VSCode等)都会自动识别当前编辑文件所在目录的TS配置,前端文件用前端规则、后端文件用后端规则,不会出现冲突。
  • 精简复用配置:如果两端的TS基础规则一致,可以在根目录新增tsconfig.base.json存放公共配置(比如target、moduleResolution等通用项),然后两端的tsconfig.json通过"extends": "../tsconfig.base.json"继承基础配置,再单独覆写自己的特殊配置即可(比如前端需要配置jsx、lib包含DOM相关项,后端不需要)。

如果需要跨端共享类型(比如接口请求的入参、返回值类型),可以在根目录新增shared目录存放公共类型定义,然后在两端的tsconfig.json的include数组中添加对应路径即可。

ESLint配置管理

逻辑和TS配置基本一致:

  • 最简迁移方案:保留两个项目原有各自的.eslintrc配置和对应的lint依赖即可,ESLint默认会读取当前文件最近一级目录的配置文件,完全不会出现规则混用的问题。你可以在根目录的package.json中新增全局lint脚本,不用分别进入目录执行:
{
  "scripts": {
    "lint:client": "cd client && npm run lint",
    "lint:server": "cd server && npm run lint",
    "lint": "npm run lint:client && npm run lint:server"
  }
}
  • 规则统一方案:如果需要对齐两端的基础代码规范,可在根目录新增.eslintrc.base.json存放公共规则,两端的ESLint配置继承基础配置后,再单独配置自己的运行环境(前端新增browser环境、后端新增node环境)和专属插件(比如前端用eslint-plugin-react,后端不需要)即可。

可选优化

如果项目后续迭代规模变大,你可以启用包管理器的Workspace功能(npm/yarn/pnpm均支持),把两端公共的依赖提升到根目录安装,减少重复的node_modules体积,不过对于小项目来说完全不需要,各管各的依赖迁移成本最低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:09:04