[TypeScript学习笔记-11]创建一个极简的monorepo项目
Monorepo项目是一种将多个相关应用、服务或库统一存放在同一个代码仓库的管理方式。它不同于传统的多仓库Polyrepo通过集中化的结构提升协作效率。在monorepo中所有项目共享统一的依赖、构建工具和配置文件开发者可以跨项目进行原子化提交和大规模重构避免版本冲突。常见目录结构包括packages/(存放公共库)、apps/(存放应用)以及统一的tsconfig.base.json和pnpm-workspace.yaml。这种模式在大型团队和复杂系统中尤为常见1. 项目结构monorepo-root/ ├─ .vscode/ | ├─ launch.json VSCode启动文件 | └─settings.json VSCode配置文件 | ├─ packages/ │ ├─ foo/ # 库foo │ │ ├─ src/ # 源代码目录 | | | └─ index.ts # TypeScript代码文件 │ │ └─ package.json # 包配置文件 │ └─ bar/ # 库bar │ │ ├─ src/ | | | └─ index.ts │ └─ package.json│ │ ├─ apps/ │ ├─app1/ # 应用1 │ | ├─ src/ # 源代码目录 | | | └─ index.ts # TypeScript代码文件 │ | └─ package.json # 包配置文件 │ └─ app1/ # 应用2 │ ├─ src/ | | └─ index.ts │ └─ package.json │ ├─ pnpm-workspace.yaml # Workspace配置 ├─ package.json # 顶层依赖/脚本 ├─ tsconfig.base.json # 基础 TypeScript 配置 └─ tsconfig.json # 顶层 TypeScript 配置2. 根目录配置文件2.1 pnpm-workspace.yamlpnpm-workspace.yaml是pnpm monorepo的核心配置文件用于声明哪些目录属于同一个工作区。它通过packages字段列出路径模式如packages/*、apps/*让 pnpm自动识别子项目并共享依赖。这样可以实现统一安装依赖、跨包联动开发、避免重复安装是管理大型多包仓库的关键机制。packages:-packages/*-apps/*2.2 package.jsonpackage.json是Node.js与前端项目的核心配置文件用于描述包的基本信息和依赖关系。它包含name、version、scripts、dependencies等字段帮助开发者管理项目生命周期。通过scripts可以定义构建、测试、启动命令通过 dependencies和devDependencies管理运行时与开发依赖还可配置main、types、exports等入口信息。它是npm、pnpm、yarn 等包管理工具识别和操作项目的关键文件。{name:monorepo-root,private:true,scripts:{build:pnpm -r run build}}2.3 tsconfig.base.json一个基础的tsconfig.base.json通常作为monorepo或多项目的统一配置文件供各子包通过extends继承。它的作用是集中管理编译选项避免重复配置。{compilerOptions:{module:ESNext,target:esnext,types:[],sourceMap:true,declaration:true,declarationMap:true,noUncheckedIndexedAccess:true,exactOptionalPropertyTypes:true,noImplicitReturns:true,noImplicitOverride:true,noUnusedLocals:true,noUnusedParameters:true,noFallthroughCasesInSwitch:true,noPropertyAccessFromIndexSignature:true,strict:true,jsx:react-jsx,verbatimModuleSyntax:true,isolatedModules:true,noUncheckedSideEffectImports:true,moduleDetection:force,skipLibCheck:true,}}2.4 tsconfig.jsontsconfig.json是TypeScript项目的核心配置文件用于定义编译器行为和项目结构。它包含compilerOptions如 target、module、strict、include与exclude控制编译范围、以及references支持多项目依赖。通过它可以统一代码检查规则、指定输入输出目录、生成类型声明文件并支持 monorepo 的项目引用。tsconfig.json让团队在大型项目中保持一致的编译标准是 TypeScript 开发的基础配置文件。{extends:./tsconfig.base.json}3. 项目fooindex.tsexportfunctiongreet(timeOfDay:string){console.log(Good${timeOfDay});}tsconfig.json:{extends:../../tsconfig.base.json,compilerOptions:{composite:true,declaration:true,outDir:./lib,rootDir:./src},include:[src]}package.json:{name:jaydenai/foo,exports:{.:{require:./lib/index.js,import:./lib/index.js,types:./lib/index.d.ts}},files:[lib,package.json],scripts:{build:tsc -p tsconfig.json}}4. 项目bar引用fooindex.tsimport{greet}fromjaydenai/fooexportfunctiongreet4Morning(){greet(morning);}exportfunctiongreet4Afternoon(){greet(afternoon);}exportfunctiongreet4Evening(){greet(evening);}tsconfig.json:{extends:../../tsconfig.base.json,compilerOptions:{composite:true,declaration:true,outDir:./lib,rootDir:./src},include:[src],references:[{path:../foo}]}package.json:{name:jaydenai/bar,exports:{.:{require:./lib/index.js,import:./lib/index.js,types:./lib/index.d.ts}},files:[lib,package.json],dependencies:{jaydenai/foo:workspace:*},scripts:{build:tsc -p tsconfig.json}}5. 应用app1引用barindex.tsimport{greet4Morning,greet4Afternoon,greet4Evening}fromjaydenai/bargreet4Morning();greet4Afternoon();greet4Evening()tsconfig.json:{extends:../../tsconfig.base.json,include:[src],references:[{path:../../packages/bar}]}package.json:{name:jaydenai/app1,dependencies:{jaydenai/bar:workspace:*},scripts:{build:tsc -p tsconfig.json}}6. VSCode相关配置launch.json启动当前选中文件进行调试{version:0.2.0,configurations:[{name:Debug App with Cordis Source,type:node,request:launch,runtimeExecutable:npx,runtimeArgs:[tsx],args:[${file}],cwd:${workspaceFolder},console:integratedTerminal,internalConsoleOptions:neverOpen}]}settings.json(屏蔽构建的产物){files.exclude:{**/node_modules:true,**/lib:true,**/*.d.ts:true,**/*.js:true,**/*.map:true,**/*.tsbuildinfo:true,**/pnpm-lock.yaml:true}}7. Debug apps/app1/src/index.ts输出Good morning Good afernoon Good evening

相关新闻

Spring Boot集成ActiveMQ实战:从入门到生产调优的避坑指南

Spring Boot集成ActiveMQ实战:从入门到生产调优的避坑指南

做了几年 Spring Boot 项目之后,我慢慢发现一个规律:很多人提到 ActiveMQ 的第一反应是"这玩意儿是不是太老了",可真到生产环境里,它依然是不少中小型系统里默默扛着异步消息的那根梁。这篇文章我打算围绕 Spring Boot …

2026/10/18 4:08:26 阅读更多 →
ECharts 3D 地图实战:china.json 数据加载与立体可视化

ECharts 3D 地图实战:china.json 数据加载与立体可视化

简介:本资源提供 ECharts 3D 地图所需的 china.json 地理数据文件,面向从事 Web 数据可视化开发的前端工程师与数据大屏设计者,用于在三维空间中渲染中国地图并展示区域数据差异。压缩包内共 1 个文件,为 GeoJSON 格式的 json 数据…

2026/10/18 4:08:26 阅读更多 →
【关注可白嫖源码】--课程设计--毕业设计--78966形体管理中心系统[编号:project79321](案件分析)

【关注可白嫖源码】--课程设计--毕业设计--78966形体管理中心系统[编号:project79321](案件分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。有需要完整资源的同学&#…

2026/10/18 4:07:24 阅读更多 →

最新新闻

通信对抗原理作业:定义、干扰技术及场景应用全解析

通信对抗原理作业:定义、干扰技术及场景应用全解析

简介:西电通信对抗原理作业为通信工程、信息安全相关专业学生提供了一份覆盖通信对抗核心知识点的整理性资料,适合期末复习、课程作业对照与考研备考使用。内容围绕通信对抗的定义、分类、技术手段与实践应用展开,具体涉及加密、认证、访问控…

2026/10/18 12:10:17 阅读更多 →
2026年Claude编码场景实测:词元之河长上下文调用与合规接入评测

2026年Claude编码场景实测:词元之河长上下文调用与合规接入评测

把 Claude 当成主力编码助手的开发者越来越多,工作流也随之变了样:整个代码仓库塞进上下文让模型做跨文件重构,长会话里连续追问几十轮,Agent 任务一跑就是几个小时。这类用法对 API 通道的要求远高于普通问答——上下文要够长、输…

2026/10/18 12:10:17 阅读更多 →
HCIA-Security笔记:USG模拟器与内网攻防实战

HCIA-Security笔记:USG模拟器与内网攻防实战

简介:HCIA-Security网络安全学习笔记是一份面向华为安全认证考生和网络入门者的知识梳理文档,内容围绕USG模拟器使用、协议原理与常见攻击防御展开。资源以单个PDF形式打包,体积约19.3MB,既包含USG环境准备、默认地址与密码、清空…

2026/10/18 12:10:17 阅读更多 →
深交所Level2行情接入:STEP协议与FAST解码全解析

深交所Level2行情接入:STEP协议与FAST解码全解析

简介:深交所Level2行情数据接口规范V1.11是深圳证券交易所发布的最新行情数据接口标准,面向高频交易、量化交易及涨停板交易等追求精确行情的专业人士,系统定义了Level2与STEP格式的行情数据获取和处理规则。文档覆盖集中竞价、盘后定价交易、…

2026/10/18 12:10:17 阅读更多 →
全色影像水体提取:阈值分割原理与后处理实践

全色影像水体提取:阈值分割原理与后处理实践

简介:针对全色影像水体提取的专题资源,聚焦阈值分割技术在单波段遥感影像中的应用。全色影像空间分辨率较高、地表细节丰富,因此适合用于快速水体识别;适合地理信息系统、环境监测、城市规划等领域的初学者或研究人员,…

2026/10/18 12:10:17 阅读更多 →
Prompt设计实战指南:从模糊指令到精准AI输出

Prompt设计实战指南:从模糊指令到精准AI输出

简介:《AI引擎:Prompt指令设计绿皮书》是一份面向AI初学者与新媒体从业者的实用型Prompt工程指南,聚焦解决ChatGPT、Claude、Bard等大模型使用中“指令写不准、输出不达标”的核心痛点。全书系统拆解指令设计的7大技巧公式(如明确…

2026/10/18 12:09:17 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →