21、【Agent】【OpenCode】源码构建(项目构建)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Agent】【OpenCode】源码构建(依赖安装)

继续对比了 TS 和 JS 的开发体验,并简单推理了下 TS 的编译过程,然后提到了像 Bun 这样的现代工具,之所以看起来像能直接运行 TS 代码,其实是在后台自动编译了 TS → JS,最后再总结了下两者的区别,然后开始使用 bun install 安装 OpenCode 源码的依赖,发现安装依赖的过程中发现卡住了,原因是 npm 官方源在国内访问极慢或容易被干扰,通过临时指定 registry 强制使用国内镜像源最后成功安装了 OpenCode 所需的依赖,下面继续分析

OpenCode

安装完 OpenCode 依赖之后,可以开始构建项目

通过 bun run build 命令可以开始构建项目,把 TypeScript 等源码转换成可运行的 JavaScript,并打包优化,就像 npm run buildyarn build 一样,不过需要注意的是,这里的 build 不是 Bun 内置命令,而是 package.json 中定义的脚本

另外,要注意的是,这里是路径是 packages/opencode/package.json,而不是项目根目录下的那个 package.json,在终端输入

bash 复制代码
bun run --cwd packages/opencode src/index.ts --help

可以查看到 opencode 的帮助信息如下

OK,接着先进入 opencode 的目录

bash 复制代码
cd packages/opencode

然后在 opencode 的目录下,再输入

bash 复制代码
bun run build

对项目进行构建,此时会开始跑 build 脚本

构建成功后

构建成功后,dist/ 目录下可以看到构建出的 OpenCode 多平台预编译二进制文件,独立可执行,无需 Bun/Node.js 即可运行 ,比如当前的系统是 Ubuntu(Linux)+ x86_64(AMD 64位),所以可以用 opencode-linux-x64 这里的版本

终端输入

bash 复制代码
./dist/opencode-linux-x64/bin/opencode --version

可以看到构建出来的版本信息

终端输入

bash 复制代码
./dist/opencode-linux-x64/bin/opencode

可以看到构建出来的 opencode 程序,版本信息在右下角

当然,如果嫌麻烦,毕竟构建所有平台的可执行二进制文件也是要花时间的,打开 build.ts 文件,这里有个 --single 选项

当该选项生效时,其他平台版本的 opencode 将不会被构建(返回 false

OpenCode 支持构建的所有平台目标 allTargets 内容如下

bash 复制代码
const allTargets: {
  os: string
  arch: "arm64" | "x64"
  abi?: "musl"
  avx2?: false
}[] = [
  {
    os: "linux",
    arch: "arm64",
  },
  {
    os: "linux",
    arch: "x64",
  },
  {
    os: "linux",
    arch: "x64",
    avx2: false,
  },
  {
    os: "linux",
    arch: "arm64",
    abi: "musl",
  },
  {
    os: "linux",
    arch: "x64",
    abi: "musl",
  },
  {
    os: "linux",
    arch: "x64",
    abi: "musl",
    avx2: false,
  },
  {
    os: "darwin",
    arch: "arm64",
  },
  {
    os: "darwin",
    arch: "x64",
  },
  {
    os: "darwin",
    arch: "x64",
    avx2: false,
  },
  {
    os: "win32",
    arch: "arm64",
  },
  {
    os: "win32",
    arch: "x64",
  },
  {
    os: "win32",
    arch: "x64",
    avx2: false,
  },
]

这里涉及到四个属性 osarchabiavx2,这四个属性是构建跨平台可执行文件(尤其是用像 Bun,Node.js,nexe 等工具打包时)的核心概念,下面来详细分析下

首先是 os 操作系统,表示目标程序运行的操作系统类型,属于底层软件(不同操作系统提供的底层接口,系统调用,动态库格式都有区别),所以上层应用的构建包要区分操作系统,Bun 工具集支持的三种操作系统:

  • linux:各种 Linux 发行版,比如 Ubuntu,CentOS,Debian 等
  • darwin:macOS,macOS 内核叫做 Darwin
  • win32:Windows,无论 32 位还是 64 位,Node/Bun 都叫 win32

OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Agent】【OpenCode】源码构建(平台目标属性)

相关推荐
GISer_Jing2 小时前
从CLI到GUI桌面应用——前端工程化进阶之路
前端·人工智能·aigc·交互
0x3302 小时前
LangGraph Studio 可视化调试指南:从零配置 LangGraph + LangSmith 智能体工作流
人工智能
lovingsoft2 小时前
Agent工程师师岗位:一位软件的交付工程师
人工智能
小仓桑2 小时前
【Agent智能体项目实战一】阿里云通义千问兼容 OpenAI 接口实现 AI 对话
人工智能·阿里云·云计算·agent
往事如yan2 小时前
从0到1软件开发文档蓝图
人工智能
关山月2 小时前
使用自注意力(Self-Attention)与多头注意力(Multi-Head Attention)分析提示词好坏
人工智能
小程故事多_802 小时前
抛弃昂贵MCP,拥抱技能+CLI,AI Agent架构的成本革命与性能突围
人工智能·架构·aigc
tq10862 小时前
参考交通责任与风控体系,构建AI责任与风险体系
人工智能
CareyWYR2 小时前
每周AI论文速递(260316-260320)
人工智能