124、【Agent】【OpenCode】项目配置(tsconfig.json 与 package.json) 📅 2026/6/21 4:40:57 【声明】本博客所有内容均为个人业余时间创作所述技术案例均来自公开开源项目如GithubApache基金会不涉及任何企业机密或未公开技术如有侵权请联系删除背景上篇 blog【Agent】【OpenCode】项目配置应用级 Monorepo分析了 OpenCode 历史的提交记录其中版本号的变更基本都是由 OpenCode 单独提一个合入请求 MR 进行更新的单次 MR 内只有更新版本号这一个动作并且这个动作会更新掉所有子包里的版本号并将修改同步到bun.lock结合历史提交记录可以推断出 OpenCode 的子包大概是不用发布到 npm 的属于应用级别的 Monorepo而不是库级别的 Monorepo然后接着分析了两种 Monorepo 的区别接着分析了另一个关键配置字private当private为true时npm/yarn/pnpm 会拒绝执行 npm publish也说明了 OpenCode 使用的是应用级别的 Monorepo接着分析了export配置字在库级别 Monorepo 和应用级别 Monorepo 的区别下面继续分析OpenCode下面接着分析export配置这里的./*: ./src/*.ts是 Node.jsBun 官方支持的子路径模式等价于import { foo } from ‘opencode/utils/helper’ → 解析为 opencode/src/utils/helper.tsimport { bar } from ‘opencode/services/auth’ → 解析为 opencode/src/services/auth.ts任意深度任意文件只要src/下存在对应的.ts文件就能导入另外注意这里指向的是源码.ts文件而不是dist/构建产物因为 Bun 原生支持直接执行 TypeScript所以支持exports通配符可以直接指向源码OK最后再来分析下package.json和tsconfig.json子包下唯二的两个 JSON 配置文件终端输入find.-path./opencode/node_modules-prune-o-nametsconfig.json可以看到项目下的所有tsconfig.json文件可以看到项目中所有的tsconfig.json如下可以看到有子包的地方除了有package.json还有tsconfig.json这俩文件虽然都是 JOSN 格式且经常出现在同一个目录中但其职责和设计目的完全不同简单来说package.json是写给 Node.js 等包管理器看的运行时与依赖契约而tsconfig.json则是写给 TypeScript 编译器看的类型检查与转译指令下面来详细看下维度package.jsontsconfig.json核心职责定义包的元数据依赖入口脚本等定义 TS 编译选项类型检查范围路径映射等主要消费者npm/pnpm/yarn/bunNode.js 运行时tscIDEVSCodeESLint 等是否 Node.js 标准是Node.js 官方规范否TypeScript 团队自定义缺失后果目录不被识别为包无法install或publishTS 回退到默认配置IDE 可能报错或行为异常Monorepo 中的角色workspace 协议依赖拓扑exports解析等项目引用baseUrl/paths别名增量编译等运行时影响直接影响程序如何被加载和执行仅影响构建检查阶段构建产物中不包含此文件结合之前的分析两者的配合方式非常清晰其中package.json负责包级别的连接比如workspaces告诉包管理器哪些子目录是内部包export告诉 BunNode.js 等在 import 时去哪里找文件dependencies声明这个包依赖谁binmaintypeprivate决定包作为整体如何被消费tsconfig.json则负责代码级别的连接如references告诉 tsc 子包之间的类型依赖关系支持增量编译paths让 IDE 和 tsc 能解析opencode/utils/*这类别名注意这里和package.json的exports是两套独立机制include和exclude控制哪些文件参与类型检查compilerOptions.strict等统一整个 Monorepo 的类型安全级别OK本篇先到这里如有疑问欢迎评论区留言讨论祝各位功力大涨技术更上一层楼更多内容见下篇 blog