HarmonyOS鸿蒙Next中JS到ArkTs的适配

HarmonyOS鸿蒙Next中JS到ArkTs的适配 【问题描述】:现在的应用是用JS写的,怎么从JS迁移到ArkTs,看Dev Eco的说明文档里有支持JS,但是没找到如何创建一个JS工程的选项,从JS迁移到ArkTs并且组织成Dev Eco能识别的工程结构,有什么帮助文档或者工具可以做吗?

6 回复

一、JS工程迁移核心步骤

  1. 工程结构调整 在DevEco Studio中直接创建OpenHarmony工程(选择"Application > Empty Ability"模板),创建后:

    • 将原有JS文件放入工程目录的entry/src/main/js/
    • build-profile.json5中确认以下配置:
    "buildOption": {
      "sourceType": "js" // 标识当前为JS工程
    }
    
  2. 渐进式迁移方案

    • 混合开发模式: ArkTS可直接调用JS模块(无需桥接),示例:
      // ArkTS文件 (Index.ets)
      import { jsFunc } from './JsLib.js'; // 直接导入JS模块
      
      @Entry
      @Component
      struct Index {
        build() {
          Button("Call JS")
            .onClick(() => {
              jsFunc(); // 调用JS函数
            })
        }
      }
      
      // JsLib.js
      export function jsFunc() {
        console.info("JS function called");
      }
      
    • 分模块迁移: 按优先级逐个将JS文件重命名为.ets后缀,并在文件中:
      1. 添加类型注解(如let count: number = 0
      2. 显式初始化类属性(ArkTS强制要求):
      // 迁移前JS
      class Person {
        name; // 未初始化
      
      // 迁移后ArkTS
      class Person {
        name: string = ""; // 显式初始化
      

二、DevEco工程配置要点

  1. 模块识别规则

    • 当目录中包含.js文件时,DevEco自动识别为JS工程
    • .ets文件占比超50%时,建议在build-profile.json5中切换为ArkTS工程:
    "buildOption": {
      "sourceType": "arkts"
    }
    
  2. 文档迁移辅助 使用 ArkTSDoc 自动生成功能(菜单栏 > Tools > Generate ArkTSDoc):

    • 支持对JS/TS/ETS文件批量生成文档
    • 要求注释格式:
    /**
     * 计算两数之和
     * @param {number} a - 参数1
     * @param {number} b - 参数2
     * @since 11
     */
    export function add(a, b) {
      return a + b;
    }
    

三、迁移最佳实践

  1. 类型安全改造

    • 将JS的var/let替换为具体类型:
    // 改造前
    let age = 20;
    
    // 改造后
    let age: number = 20;
    
    • 使用联合类型处理可能为undefined的返回值:
    // JS原始代码
    function getName() {
      return this.name; 
    }
    
    // ArkTS适配
    getName(): string | undefined {
      return this.name;
    }
    
  2. 异步处理标准化 将JS回调改为Promise或async/await

    // 迁移后示例
    async function fetchData() {
      try {
        let data = await http.get("api/data");
      } catch (error) {
        console.error(error);
      }
    }
    

关键提醒

  • 当前DevEco Studio不提供纯JS工程模板,但支持在OpenHarmony工程中直接使用JS开发
  • 当工程内同时存在.js.ets文件时,编译链会自动处理混合编译
  • 建议优先迁移核心业务模块,UI组件推荐使用ArkUI声明式语法重构

更多关于HarmonyOS鸿蒙Next中JS到ArkTs的适配的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


UI开发可以选择 兼容JS的类Web开发范式;

  • 兼容JS的类Web开发范式的方舟开发框架,采用经典的兼容JS的类Web开发范式API、CSS、JavaScript三段式开发方式。使用HML标签文件进行布局搭建,使用CSS文件进行样式描述,使用JavaScript文件进行逻辑处理。UI组件与数据之间通过单向数据绑定的方式建立关联,当数据发生变化时,UI界面自动触发更新。此种开发方式,更接近Web前端开发者的使用习惯,快速将已有的Web应用改造成方舟开发框架应用。主要适用于界面较为简单的中小型应用开发。

    请参考兼容JS的类Web开发范式API文档,全面地了解组件,更好地开发应用。

cke_1672.png

还是要用arkts,只是在arkts中可以调用ts。ts无法调用arkts

部分语法之类的不支持,具体参考下面建议

TS代码适配成ArkTS代码的建议

只是语法层面支持,但是你还是得创建arkts的项目,然后适配你的js项目,比如UI用webview,逻辑用js封装,

鸿蒙Next中JS到ArkTS的适配,主要通过ArkTS编译器工具链实现。开发者需将JS/TS代码迁移至ArkTS语法,利用声明式UI和状态管理等特性。适配过程涉及组件、API调用及工程结构的转换,确保应用在ArkTS环境下的兼容性与性能。

在HarmonyOS Next中,JS(类Web范式)与ArkTS(声明式开发范式)是两种不同的应用开发方式。目前,DevEco Studio主要聚焦于ArkTS声明式开发,因此新建工程模板默认不提供纯JS(类Web范式)工程选项。

针对从现有JS代码迁移到ArkTS的需求,可以参考以下路径:

  1. 代码迁移:官方提供了《ArkTS迁移指南》作为核心参考文档。该指南详细说明了如何将JS/TS的语法、组件、API等逐模块重构为ArkTS。迁移本质上是基于两种范式差异进行代码重写,需重点关注:

    • 语法:从JS的类Web标签语法转为ArkTS的声明式UI语法(例如,用@Component装饰的struct)。
    • 生命周期:适配从JS到ArkTS页面和组件生命周期的变化。
    • API调用:将JS API调用替换为对应的ArkTS API(许多常用能力已存在对应实现)。
  2. 工程结构:使用DevEco Studio创建一个标准的Empty Ability(或其他模板)的ArkTS工程。迁移后的ArkTS代码应放置在该工程的ets目录下,并遵循其模块化结构(如pages目录存放页面)。原有的JS工程资源(如图片、配置文件)可酌情迁移至新工程的相应目录。

  3. 工具与资源

    • 核心文档:请优先查阅DevEco Studio内置的文档或华为开发者官网的《ArkTS迁移指南》。
    • 示例代码:在DevEco Studio的示例中心或开发者官网,搜索“ArkTS”相关示例,可直观对比两种范式代码的差异。
    • 编译构建:配置好Hvigor构建脚本后,DevEco Studio能自动识别并编译ets目录下的ArkTS代码。

总结:迁移过程主要是依据指南进行人工代码重构与验证,并将重构后的ArkTS代码按标准工程结构放置。请务必以官方最新迁移指南为准。

回到顶部