【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Agent】【OpenCode】源码构建(TypeScript&JavaScript)
分析了 Bun 工具集性能提升的另一大原因:内置工具链,零转译开销,然后提到了 OpenCode 是个典型的 JavaScript/TypeScript 项目,并分析了 TypeScript 和 JavaScript 的联系与区别,一句话总结:TypeScript = JavaScript + 类型系统(Type System) + 现代语法糖,然后提到了关键点:虽然 TS 不能直接运行,必须先编译成 JS 才能被引擎执行,但 Bun 等现代工具可以自动编译并运行,算是间接运行 TS,然后分析了类型系统(Type System)是 TypeScript 最大的价值所在,并对比了 JS 和 TS 在函数参数类型检查上的不同,最后列举了 TypeScript 新增的核心特性,下面继续分析
OpenCode
上篇 blog 对比了 JS 和 TS 在函数参数类型检查上的不同,下面再对比下开发体验
| 场景 | JavaScript | TypeScript |
|---|---|---|
| 写错属性名 | 运行时报错 | 写代码时就提示 |
| 看不懂第三方库 API | 靠文档猜 | 编辑器自动提示参数和返回值 |
| 重构大型项目 | 容易漏改,风险高 | 改一处,所有相关地方自动报错 |
| 团队协作 | 靠注释约定类型 | 天然支持类型本身 |
所以可以看到大型项目(比如 VSCode,OpenCode 等)几乎都用 TypeScript
下面再看 TS → JS 的编译过程,假设有 TS 代码如下
javascript
function greet(name: string): string {
return "Hello, " + name;
}
经过 TS 编译器输出后,JS 代码如下
javascript
function greet(name) {
return "Hello, " + name;
}
可以看到类型信息被擦除,只剩下干净的 JavaScript 脚本
而像 Bun 这样的现代工具,之所以看起来像能直接运行 TS 代码,其实是它们在后台自动编译了 TS → JS,然后立即运行生成的 JS,所以给人感觉 TS 能直接跑,其实还是转换成了 JS,比如
bash
bun run my-script.ts
这条命令执行的其实是自动编译 TS + 运行 JS
最后再总结下两者的区别
| 对比项 | JS | TS |
|---|---|---|
| 是否需要编译 | 否,可以直接运行 | 是,必须编译成 JS |
| 类型系统 | 动态类型(运行时才知道) | 静态类型(写代码时就知道) |
| 适合项目规模 | 小脚本,简单页面 | 中大型应用,团队项目 |
| 错误发现时机 | 运行时 | 编码 / 编译时 |
| 学习成本 | 低 | 稍高(需学习类型语法) |
| 生态兼容性 | 全兼容 | 编译后全兼容 |
OK,终端输入
bash
bun --help
可以查看 bun 命令的信息如下

接下来构建 OpenCode 源码的第一步是安装依赖,使用 install 命令,该命令会下载项目运行或开发所需的第三方库 ,可以类比 npm install,yarn install 等命令,该命令会读取 package.json 文件中的 dependencies 和 devDependencies

然后从 npm registry 或配置的镜像源中下载这些包,存入本地缓存(Bun 用高效数据库存储,不是传统的 node_modules),然后生成或更新 bun.lockb 锁文件,确保团队的依赖保持一致
安装依赖的过程中发现卡住了

大概是因为默认从 npm 官方源(registry.npmjs.org)下载,而该源在国内访问极慢或容易被干扰,不过虽然 Bun 不像 npm 那样直接支持 .npmrc ,但它完全兼容 npm 的 registry 协议,所以可以临时指定 registry 强制使用国内镜像源(比如淘宝 NPM 镜像),终端输入
bash
bun install --registry https://registry.npmmirror.com
https://registry.npmmirror.com 是淘宝 NPM 镜像,对国内访问速度极快,该命令会从淘宝镜像下载所有包,生成的 bun.lockb 也会记录这个 registry,后续 bun install 也会自动沿用

可以看到依赖安装成功
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Agent】【OpenCode】源码构建(项目构建)