DevEco Code 构建与安装教程¶
本教程介绍如何将 DevEco Code 源码构建成可独立运行的单文件二进制,并像 npm install -g 一样直接安装到系统中使用。
一、前置要求¶
| 工具 | 版本要求 | 说明 |
|---|---|---|
| Bun | 1.3+ | 仓库使用 bun@1.3.14,包管理器与构建工具 |
| Node.js | 22+ | 安装后的启动器依赖(仅 npm 安装方式需要) |
| 操作系统 | macOS / Windows / Linux | 构建产物与当前平台匹配;官方 npm 仅发布 macOS 与 Windows |
二、构建原理¶
DevEco Code 的二进制由 packages/opencode/script/build.ts 生成。核心机制:
- 使用 Bun.build 的
compile选项,将整个应用编译成单文件可执行二进制,无需 Node 运行时即可运行。 - 编译时把以下资源一并内嵌进二进制:
- 前端 Web UI(
gen-web-ui.ts先构建 SolidJS 应用,再作为deveco-web-ui.gen.ts嵌入) - 数据库迁移脚本(
migration/目录) - 默认 Skills(
resources/skills/) - 默认 Spec 资源(
resources/spec/) - tree-sitter 解析 worker、TUI worker
- 构建时会额外复制 vendored 二进制到产物目录:
ripgrep(由script/postinstall.ts在bun install时下载到.build-cache/)ui-verification-mcp(UI 检查运行时)@deveco/deveco-cli(仅 macOS / Windows,用于 curl/irm zip 安装)- 每个目标平台输出到独立目录,并生成对应的
package.json(含os/cpu/libc字段),供 npm 发布与安装使用。
产物目录结构:
packages/opencode/dist/deveco-<os>-<arch>/
├── bin/
│ └── deveco # 单文件可执行二进制
├── vendor/
│ ├── ripgrep/ # vendored rg 二进制
│ └── ui-verification-mcp/
├── CHANGELOG.md
├── LICENSE
├── README.md
└── package.json
注意目录名与包名不同:构建产物目录名由
packages/opencode/package.json的name字段(deveco)+ 平台后缀组成(如deveco-linux-x64);而该目录内package.json的 npm 包名才是@deveco/deveco-code-linux-x64(见下文的发布机制)。
三、构建步骤¶
1. 安装依赖¶
注意:
bun install的 postinstall 钩子会下载 ripgrep 等 vendored 二进制到.build-cache/。若网络受限,可设置HTTPS_PROXY/HTTP_PROXY代理,或通过RIPGREP_DOWNLOAD_BASE指定镜像源。
2. 构建当前平台的二进制¶
--single 只构建当前平台、当前架构的原生版本(跳过 musl / baseline 变体),速度快,适合本地使用。
构建完成后,产物位于:
脚本会自动对当前平台的产物执行 --version 冒烟测试:
3.(可选)构建全部平台¶
不带 --single 会构建 allTargets 中定义的 10 个目标(darwin-arm64 / darwin-x64 / win32-x64 / win32-x64-baseline / linux-arm64 / linux-x64 / linux-x64-baseline / linux-arm64-musl / linux-x64-musl / linux-x64-musl-baseline),耗时较长,一般只在发布时使用。
4. 常用构建参数¶
| 参数 | 作用 |
|---|---|
--single |
只构建当前平台的原生二进制 |
--baseline |
在 --single 下额外构建 baseline(无 AVX2)变体 |
--skip-install |
跳过构建前额外的 bun install 步骤 |
--sourcemaps |
生成 linked sourcemap |
--skip-embed-web-ui |
不内嵌 Web UI(产物更小,但 web 界面不可用) |
--skip-agreement |
跳过用户协议检查(DEVECO_SKIP_AGREEMENT=true) |
四、安装二进制(像 npm install 一样)¶
构建出的二进制是自包含的,不需要 Node 运行时即可运行。以下三种方式任选其一。
方式一:软链接到 PATH(推荐,最简单)¶
sudo ln -s \
/path/to/deveco-code/packages/opencode/dist/deveco-linux-x64/bin/deveco \
/usr/local/bin/deveco
deveco --version # 验证
deveco # 启动
方式二:复制到系统目录¶
sudo cp /path/to/deveco-code/packages/opencode/dist/deveco-linux-x64/bin/deveco /usr/local/bin/
sudo chmod +x /usr/local/bin/deveco
方式三:本地打包为 npm 包安装(仅装二进制,不生成命令)¶
模拟官方发布流程,在产物目录执行:
cd packages/opencode/dist/deveco-linux-x64
bun pm pack
npm install -g deveco-deveco-code-linux-x64-*.tgz
注意(易踩坑):该 tgz 是平台包(
@deveco/deveco-code-linux-x64),其package.json没有bin字段,npm install -g不会自动创建deveco命令。官方 npm 安装中的deveco命令由元包@deveco/deveco-code提供(含 bin 启动器 + postinstall 脚本 +optionalDependencies),但官方元包只覆盖 macOS / Windows(ALLOWED_PLATFORMS不含 Linux),Linux 上无法通过官方元包安装。
平台包安装后,需手动把已安装的二进制链接到 PATH:
# 查看全局安装路径
npm root -g # 例如 .../installation/lib/node_modules
# 全局可执行目录为 prefix 下的 bin,而非 `npm bin -g`(该子命令在较新 npm 版本已移除)
ln -sf "$(npm root -g)/@deveco/deveco-code-linux-x64/bin/deveco" "$(npm config get prefix)/bin/deveco"
若本地已有构建产物 packages/opencode/dist/deveco-linux-x64/bin/deveco,直接链接构建产物更简单(即方式一)。
卸载¶
五、官方 npm 分发机制¶
线上 npm install -g @deveco/deveco-code 的工作原理(见 packages/opencode/script/publish.ts):
build.ts为每个平台生成@deveco/deveco-code-<os>-<arch>平台包(含二进制,preferUnplugged: true)。- 生成元包
@deveco/deveco-code: bin.deveco指向./bin/deveco(一个 Node 启动器,负责 spawn 对应平台的二进制)optionalDependencies列出所有平台包(npm 会自动只安装当前平台匹配的那个)postinstall执行postinstall.mjs(安装后处理)- 发布时
publish.ts会: - 过滤平台(
ALLOWED_PLATFORMS:darwin-arm64 / darwin-x64 / win32-x64) - 对每个平台包执行
bun pm pack+npm publish - 最后发布元包
npm install -g @deveco/deveco-code
│
▼
元包(@deveco/deveco-code)
├── optionalDependencies → 自动安装匹配当前平台的包
│ └── @deveco/deveco-code-linux-x64
│ └── bin/deveco ← 真正的单文件二进制
├── bin/deveco ← Node 启动器,spawn 平台二进制
└── postinstall.mjs ← 安装后处理
六、常见问题与注意事项¶
1. Linux 支持情况¶
- 源码支持构建 Linux 二进制(linux-arm64 / linux-x64 / musl 变体)。
- 官方 npm 包暂不支持 Linux:
publish.ts的ALLOWED_PLATFORMS仅包含 darwin-arm64、darwin-x64、win32-x64。若需在 Linux 使用,请按本教程自行构建(方式一 / 方式二)。 - HarmonyOS 编译构建、模拟器与真机调试依赖 DevEco Studio(仅 Windows / macOS 可用),Linux 上这些能力不可用。
2. 构建失败:ripgrep 缓存找不到¶
ERROR: ripgrep cache not found for <platform>. Run "bun install" first to download vendored binaries.
说明 .build-cache/ripgrep/ 下没有对应平台的 rg 二进制。先执行:
或手动执行 bun run packages/opencode/script/postinstall.ts。
3. 修改了 API / SDK 后需重新生成¶
改动 packages/opencode/src/server/server.ts 等 API 相关代码后,构建前先运行:
4. 更新依赖¶
5. 发布流程(维护者)¶
正式发布走 script/publish.ts:
它会更新所有包的版本号、重新构建 SDK、构建全部平台二进制并发布到 npm,最后打 tag 推送到远端。