使用OXC加速你的鸿蒙项目

前端领域中最近一两年最热门的事情莫过于各种基于 Rust/Go 重写的工具或者框架。其中最有名的莫过于由 void zero 出品的 OXC,基于 Rust 实现的语法解析、代码格式化、代码规范检测工具。

A collection of high-performance JavaScript tools written in Rust.

其最具魅力的地方就在于兼容社区已有的工具链并且相较于其已有的工具链性能能够达到几倍甚至于几十倍的性能提升。

由于 ArkTS 本身是基于 TS 的超集,所以从理论上我们可以通过拓展 OXC 的实现来将 OXC 支持到 ArkTS 中,从而优化鸿蒙中的日常开发体验。

背景

鸿蒙的工程环境下整体基于 DevEco Studio 提供代码的开发、检测、编译等能力。其中有几个能力在现有的工具链中基本上无法使用:

  1. AST 解析能力。
  2. 代码格式化。支持格式化、但是自定义能力和性能以及脚手架工具支持性太差。
  3. 自定义 Lint 校验。完全不支持自定义校验。

以上能力无法满足的核心问题在于现有的工具链只支持 JS/TS 等官方语法,而 ArkTS 更偏向于方言,部分语法无法解析导致支持上存在一些问题。

因此基于 OXC 拓展对 ArkTS 支持成为了核心目标,在此基础之上提供与 oxfmt、oxlint 体验基本一致的上层工具链,OXC-ARK 由此诞生。

github.com/ohos-rs/oxc...

安装

目前支持 cargo 和 npm 安装,但是强烈建议使用 npm 进行安装。

bash 复制代码
npm install @ohos-rs/oxk -g

安装完成之后可以通过oxk命令启动并且查看命令指南。

Format

Format 工具完全兼容 oxfmt 的配置文件以及配置项。通过 oxk format子命令启动。

bash 复制代码
oxk format "**/*.{ets,mjs,js,ts,json5}" -t=10

支持 ETS、JSON5 等文件类型的格式化。

Lint

Lint 工具也是完全兼容 oxlint 的配置文件以及配置项,通过oxk lint子命令启动。

bash 复制代码
oxk lint --config .oxlintrc.json "src/**/*.ets"

内建规则

由于 ArkTS 相较于 TS 存在较多的限制,因此 ArkTS 本身有很多代码限制,具体可以参考 从 TypeScript 到 ArkTS 的适配规则 。这部分规则目前已经基于 oxlint 的规范拓展实现为arkts插件内置到 lint 工具中,可以通过插件开启以及进行配置。

json 复制代码
{
  "plugins": ["arkts"],
  "rules": {
    "arkts/no-symbol": "error"
  },
}

剩余的规则可以参考 ArkTS built-in lint 。

版本校验

另一个核心问题在于,目前 IDE 并没有提供 API 版本检测的能力,一个核心的场景:当我们配置的 App 最低支持 API 版本为 15,但是在代码中实际上调用到了 API20 提供的能力时,在开发阶段是无法发现的,只会在运行时出现。

因此我们提供了内置的 lint 规则来检测校验该问题,在配置文件中如下配置:

json 复制代码
{
  "plugins": ["arkts"],
  "rules": {
    "arkts/system-api-version": [
      "error",
      {
        // 配置的App最低支持API版本
        "minApiVersion": 11,
      },
    ],
  },
}

当我们代码中使用到高于 API15 的能力时,执行 lint 时将会出现报错。

注意:该能力目前仅依赖静态分析,对于太过于动态的逻辑无法进行调用链分析可能会导致分析不到。

总结

得益于社区开源项目的能力,我们能够快速的在新的生态中进行拓展和实现来丰富生态能力,我也寄希望于能够在此基础之上回馈到上游社区,在此感谢 OXC 团队的工作。

相关推荐
贾伟康10 小时前
HarmonyOS API 26 HMAF Skill 端侧 A2A 消息去重与上下文最小化
harmonyos·arkts·skill·a2a·hmaf
贾伟康10 小时前
HarmonyOS API 26 HMAF Skill 多 Skill 冲突仲裁与可恢复执行
harmonyos·arkts·智能体·skill·hmaf
钉先生贾11 小时前
毕业项目:从上游更新到回归发布的完整维护闭环
华为·harmonyos
行者-全栈开发11 小时前
【鸿蒙心迹】权限申请全流程——从声明到用户授权的完整链路(HarmonyOS 7.x)
华为·harmonyos
KevinChaos1 天前
阳台小花园开发手记 01|HarmonyOS 7.0 互动卡片:小花园为何要两套界面
华为·harmonyos
Ranger09291 天前
下一代鸿蒙打包工具链:arkdown
harmonyos
程序猿追1 天前
一个工程面向手机与二合一:HarmonyOS 6 部署配置和本地手记
华为·智能手机·harmonyos
行者-全栈开发2 天前
【鸿蒙心迹】深色模式适配全链路——从配置到自定义(HarmonyOS 7.x)
华为·harmonyos
行者-全栈开发2 天前
【鸿蒙心迹】国际化 i18n 与多语言资源管理实战(HarmonyOS 7.x)
ui·华为·重构·国际化·harmonyos·多语言
OH_TPC2 天前
HarmonyOS APP开发---"云客服"远程视频客服App,需要用到这个库
harmonyos