尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

几个主流的环境管理器(rustup、uv、nvm、fnm)已经在鸿蒙 PC 上可用

几个主流的环境管理器(rustup、uv、nvm、fnm)已经在鸿蒙 PC 上可用 1 前言在进行软件开发的过程中开发者经常需要用到各种环境管理器来管理自己的开发环境Rust 用 rustupPython 用 uvNode.js 用 nvm 或 fnm。这些环境管理器都没有官方适配鸿蒙用户很难在鸿蒙 PC 上使用这些工具。现在这四款环境管理器已经全部收录进 Harmonybrew 并完成了鸿蒙适配。大部分适配工作由我本人完成。本文介绍它们的使用方式以及适配原理。2 使用方式2.1 rustuprustup 是 keg-only 安装避免与brew install rust冲突需要手动把它的 bin 目录加入 PATHbrewinstallrustupexportPATH$(brew--prefixrustup)/bin:$PATH建议把第二行写入~/.zshrc。之后即可正常使用rustup show# 首次会自动下载 stable 工具链cargonew hellocdhellocargorun# Hello, world!默认工具链为 stable且默认走阿里云 Rust 镜像国内网络友好。2.2 uvbrewinstalluv无需额外 PATH 配置。基本用法uv venv--python3.12.venv uv pipinstallnumpyuv 安装解释器时默认从 python-build-standalone 获取且默认已经换成淘宝镜像源国内可直接下载。pip 三方库的源没有默认换国内大部分情况下都能访问通只是速度可能会慢。如果觉得慢可以自己换源。最简单的方式是设置环境变量UV_DEFAULT_INDEX一劳永逸exportUV_DEFAULT_INDEXhttps://mirrors.aliyun.com/pypi/simple/建议把这行写入~/.zshrc。也可以只在单次命令里临时指定uv pipinstall--index-url https://mirrors.aliyun.com/pypi/simple/ numpy需要注意uv 下载的解释器内置 pip 被禁用python -m pip会报错这是刻意为之请统一使用uv add或uv pip install。2.3 nvmbrewinstallnvm鸿蒙 PC 上官方 nodejs.org/dist 不发布鸿蒙二进制需要按 caveats 提示指定第三方分发源并加载 nvmexportNVM_NODEJS_ORG_MIRRORhttps://ohos-node.com/distmkdir-p~/.nvmexportNVM_DIR$HOME/.nvm[-s$(brew--prefixnvm)/nvm.sh]\.$(brew--prefixnvm)/nvm.sh建议把上面几行写入~/.zshrc。之后即可安装、切换 Node.js 版本nvminstall--ltsnvmlsnode--version2.4 fnmbrewinstallfnm与 nvm 一样需要指定第三方分发源并按 caveats 配置 shell 环境exportFNM_NODE_DIST_MIRRORhttps://ohos-node.com/disteval$(fnmenv)建议把上面两行写入~/.zshrc。之后即可使用fnminstall--ltsfnm use lts-latestnode--version3 源的策略包管理器本身的适配并不复杂让它们识别鸿蒙这个平台再保证工具自身能在鸿蒙上编译通过即可。真正难搞的是“源”——这些工具下载的语言环境从哪来、能不能在鸿蒙上跑。四个工具用了三种不同的策略解决源的问题。3.1 rustup对接 Rust 官方源Rust 官方社区已经官方发布鸿蒙版 rust 工具链ohos host triple只是没签名、依赖的 OpenSSL 版本高于系统内置的 3.0.9、SSL 证书路径也没指向系统可用的位置下载下来不能直接使用。Harmonybrew 提供的 rustup 会用 patchelf 等工具对这个工具链做后处理处理签名问题、OpenSSL 依赖问题和 SSL 证书路径问题因此在用户视角上可以做到开箱即用。由于官方从 stable 1.93.0 起才开始发布 ohos host 工具链更早的版本只有 rust-std 的 ohos target用于交叉编译因此本工具支持的 rust 工具链版本有局限仅 nightly 与 stable ≥ 1.93.0。3.2 uv蹭 musl 生态uv 把鸿蒙解析为 linux-musl 平台因此无论是它下载的 Python 解释器还是后续安装的三方库 wheel用的都是 musl 生态现成的制品。musl 生态成熟、PyPI 上的 musllinux wheel 覆盖面广这条路最省事。代价是这些 musl 制品并未真正进行过鸿蒙适配部分功能可能会异常这在预期之内。Harmonybrew 的 uv 还会在安装解释器和 wheel 时对其中的 ELF 文件自动签名否则 musl 二进制在鸿蒙上无法加载执行。3.3 nvm、fnm自建 Node.js 源Node.js 官方 nodejs.org/dist 不发布鸿蒙二进制但我们有 musl 生态可蹭——unofficial-builds 会发布 linux-arm64-musl 版本的 Node.js。然而我没选择 musl 这条路原因有三个musl 版的 Node.js 依赖libgcc_s.so.1鸿蒙系统不自带这个库Harmonybrew 里面也没有下载下来不能开箱即用。Node.js 官方已经在源码层面支持鸿蒙自己用源码编出真正的鸿蒙版能更稳定。Node.js 给鸿蒙分配了独立的平台标识openharmony这个标识在编译期硬编码固定下来。如果用 musl 版本的 Node.js它上报的是linux平台将无法拉取到真正做了鸿蒙适配的 npm 包。基于以上原因我选择自建源这条路线我自建了一个源ohos-node.com/dist里面提供了真正的鸿蒙版 Node.jsHarmonybrew 在安装提示中引导用户将 nvm 与 fnm 指向这个源拉取。待 nvm 官方支持鸿蒙后这个源可直接服务于官方 nvm。nvm 官方仓库已经有正在开启的鸿蒙适配 PRhttps://github.com/nvm-sh/nvm/pull/3898 。
返回列表