Description
ohos-ports
项目介绍
ohos-ports 致力于将 npm 生态中的三方库移植到 OpenHarmony(以下简称鸿蒙)平台。
项目采用 ports 模式——仓库中只维护补丁和构建脚本,不存储完整源码。当前 Node.js 运行时已经支持鸿蒙系统,大部分纯 JS 的 npm 包可直接运行,但使用 native addon 的包需要针对鸿蒙重新编译。理想情况下应直接向上游社区提 PR 支持鸿蒙,本项目则承载那些短期内无法合入上游、但社区又有迫切使用需求的包。
适配后的包统一发布到 npm 中心仓的 @ohos-ports scope 下,构建产物以社区版 OpenHarmony 为目标,通常也兼容 HarmonyOS 商用版本。
📦 已发布的包
当前 ports/ 目录下维护的包(CI 流水线发布):
| 包名 | 版本 | 安装 |
|——|——|——|
| @ohos-ports/better-sqlite3 | 13.0.3 | npm i @ohos-ports/better-sqlite3 |
| @ohos-ports/bufferutil | 4.1.0-2 | npm i @ohos-ports/bufferutil |
| @ohos-ports/bun-pty | 0.4.10-2 | npm i @ohos-ports/bun-pty |
| @ohos-ports/chrome-devtools-mcp | 1.7.0-beta.1 | npm i @ohos-ports/chrome-devtools-mcp |
| @ohos-ports/lightningcss | 1.33.0-1 | npm i @ohos-ports/lightningcss |
| @ohos-ports/mermaid-cli | 11.16.0 | npm i @ohos-ports/mermaid-cli |
| @ohos-ports/opentui-core | 0.5.3 | npm i @ohos-ports/opentui-core |
| @ohos-ports/oxlint-tsgolint | 7.0.2001-beta.0 | npm i @ohos-ports/oxlint-tsgolint |
| @ohos-ports/pprof | 5.0.0-beta.2 | npm i @ohos-ports/pprof |
| @ohos-ports/puppeteer | 25.6.0-beta.0 | npm i @ohos-ports/puppeteer |
| @ohos-ports/resvg-js | 2.6.2 | npm i @ohos-ports/resvg-js |
| @ohos-ports/tailwindcss-oxide | 4.3.3-beta.1 | npm i @ohos-ports/tailwindcss-oxide |
> 以上表格由 python3 docs/update-packages.py 自动生成,请勿手动编辑。
完整的 @ohos-ports 包列表(含本地发布的 Beta 包)请通过在线查询页查看。
端到端运作流程
本项目采用 npm 分阶段发布(staged publishing)机制,CI 通过 NPM_TOKEN 认证执行 npm stage publish,发布后需维护者在 npmjs.com 上 2FA 审核通过后包才正式上线。
阶段一:适配开发(贡献者操作)
1. 在 ports/<包名>/<版本>/ 目录下创建:
patchs/
└── 0001-xxx.patch # 鸿蒙适配补丁
build.sh # 构建脚本
publish.sh # 发布脚本
2. 本地或容器中执行 build.sh 验证构建
3. 本地 npm install + 验证 require/import 可正常加载
4. 提交 PR 到主仓
阶段二:CI 自动构建和发布(GitHub Actions 自动执行)
PR 合入主仓后,CI 自动触发:
1. 检测 ports/ 下变更的目录
2. 执行 build.sh 构建原生 addon
3. 执行 publish.sh → npm stage publish(通过 NPM_TOKEN 认证)
4. 维护者在 npmjs.com 审核通过(2FA)后,包正式上线
贡献指南
1. Fork 仓库
Fork 本仓库,在个人仓的 Settings → Actions 中启用工作流。
2. 准备构建环境
本项目的 CI 基于 OpenHarmony ARM64 容器运行。本地开发建议使用相同环境:
- 鸿蒙电脑(推荐)
- 或 DockerHarmony 容器(arm 服务器为佳)
构建过程中通常需要从 GitHub 下载源码,注意网络连通性。
3. 编写适配脚本
参考 ports/bufferutil/4.1.0/ 的结构,在 ports/<包名>/<版本>/ 下创建以下文件:
#### 目录结构
ports/<包名>/<版本>/
├── patchs/
│ └── 0001-update-package-json.patch # 修改包名、仓库地址等
├── build.sh # 构建脚本(需可执行权限)
└── publish.sh # 发布脚本(需可执行权限)
#### patchs/ — 鸿蒙适配补丁
补丁用于将原始包的 package.json 中的 name 改为 @ohos-ports/<包名>,并更新仓库地址等信息。示例:
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
"name": "bufferutil",
+ "name": "@ohos-ports/bufferutil",
"version": "4.1.0",
#### build.sh — 构建脚本
构建脚本负责下载源码、应用补丁、编译原生 addon、合并多平台预构建产物。典型流程:
#!/bin/sh
set -e1. 下载上游源码
curl -fsSL https://github.com///archive/refs/tags/v.tar.gz -o -.tar.gz
tar -zxf -.tar.gz
rm -.tar.gz
cd -2. 应用补丁
patch -p1 < ../patchs/0001-update-package-json.patch3. 编译原生 addon(生成 prebuilds/-/@ohos-ports+.node)
npm install
npm run prebuild4. 从官方 npm 包复制其他平台的预构建产物
cd ..
curl -fsSL https://registry.npmjs.org//-/-.tgz -o -.tgz
tar -zxf -.tgz
rm -.tgzcp -r package/prebuilds/* -/prebuilds/
rm -rf package
5. 重命名其他平台的 .node 文件为 scoped 格式
prebuildify 已自动为当前平台生成 @ohos-ports+.node,无需处理
其他平台的文件需手动重命名
cd -/prebuilds
mv darwin-arm64/.node darwin-arm64/@ohos-ports+.node
... 其他平台同理
#### publish.sh — 发布脚本
发布脚本通过 npm stage publish --provenance 进行分阶段发布,--provenance 生成来源证明,CI 中通过 NPM_TOKEN 认证:
#!/bin/sh
set -ecd -
npm stage publish --provenance --tag latest --access public
> stage 后包不会自动上线,需维护者在 npmjs.com 上 2FA 审核通过后正式发布。
5. 本地构建和验证
以下两种方式任选其一:
方式一:通过容器构建
启动鸿蒙容器
docker pull ghcr.io/hqzing/dockerharmony:latest
docker run -itd --name=ohos ghcr.io/hqzing/dockerharmony:latest将仓库复制到容器中
docker cp ohos-ports ohos:/root进入容器
docker exec -it ohos sh准备环境
cd /root/ohos-ports
source setup-tools.sh
source setup-env.sh构建
cd ports/<包名>/<版本>
./build.sh
方式二:通过个人 Fork 仓的 GitHub Actions 调试
将代码推送到个人 Fork 仓,CI 会自动触发构建。在 Actions 页面观察 build.sh 的执行日志,确认构建是否通过。publish.sh 因缺少 NPM_TOKEN 会失败,属正常行为。
> 构建后需验证包是否可用:新建一个测试项目,npm install 构建产物,确认能正常 require/import。
6. 提交 PR
将 PR 提到本仓库。PR 合入后,CI 会自动触发构建和发布。
注意事项
1. 根目录的 setup-tools.sh 和 setup-env.sh 可支撑常规构建环境配置。深度场景可自行在 build.sh 中编写环境配置命令。
2. 适配过程要注意兼容性,请勿破坏包在其他 OS 上的行为。
3. 发布软件包时建议使用 x.y.z-1、x.y.z-2 等修订版本号,便于在不改变 semver 版本的情况下迭代补丁。
4. 尊重他人知识产权,改包时请勿改动原有的作者和开源许可证信息。
鸣谢
本项目的构建和 CI 流水线基于 DockerHarmony 提供的 OpenHarmony 容器环境,感谢该项目为鸿蒙原生编译提供的标准化基础设施。


