HarmonyOS鸿蒙Next中uni-app基于uni cli创建的项目如何适配打包

HarmonyOS鸿蒙Next中uni-app基于uni cli创建的项目如何适配打包 基于uni-app提供的uni cli创建的项目,使用vscodewebstorm等开发工具而非HBuilderX开发,然后用uni cli的命令构建编译,再通过HBuilderX导入编译产物进行运行、打包操作。但目前uni cli文档中没有介绍如何构建HarmonyOS应用,此情况如何解决运行到HarmonyOS设备和打包HarmonyOS应用的问题?


更多关于HarmonyOS鸿蒙Next中uni-app基于uni cli创建的项目如何适配打包的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

【背景知识】

  1. uni-app可以通过HBuilderX可视化界面创建项目,也可以通过uni cli创建项目
  2. HBuilderX创建的项目仅能在HBuilderX中开发,但基于uni cli创建项目既可以在vscodewebstorm中开发,也可以使用HBuilderX开发。

【解决方案】

一、配置依赖。

  1. 在package.json的dependencies中配置:
    "@dcloudio/uni-app-harmony": "3.0.0-4080720251210001"

  2. 在package.json的scripts中配置:
    "dev:app-harmony": "uni -p app-harmony"
    "build:app-harmony": "uni build -p app-harmony"

  3. 如果有uts插件,还需要在package.json的devDependencies中配置:
    "@dcloudio/uni-uts-v1": "3.0.0-4070620250821001"

  4. uni-app开发HarmonyOS只支持Vue3(不仅仅支持组合式写法,也支持选项式写法)、不支持Vue2,不支持plus、但支持nvue,见兼容性说明

二、通过uni cli构建产物。

App平台 Vue2 Vue3
其他平台 npm run dev:app-plus
npm run build:app-plus
npm run dev:app
npm run build:app
HarmonyOS 不支持 npm run dev:app-harmony
npm run build:app-harmony

三、通过HBuilderX打包。

App平台 导入构建产物 导入整个项目
其他平台 支持 支持
HarmonyOS 目前不支持 支持

HBuilderX可以导入识别其他App平台构建产物,然后在HBuilderX中运行、打包,但目前不支持HarmonyOS平台

其他App平台和HarmonyOS平台均支持导入整个uni-app项目,然后在HBuilderX中运行、打包。

四、配置环境变量。
因为HarmonyOS不能直接通过HBuilderX导入uni cli构建产物打包无法指定mode,因此需要通过vite配置环境变量。

import uni from '@dcloudio/vite-plugin-uni';
import {
  defineConfig,
  loadEnv
} from 'vite'
// 需要npm i dotenv安装dotenv依赖包
import dotenv from 'dotenv';
import config from './config/config.js';
import envConfig from './env/config.json';

// 优先使用配置文件中的CURRENT_ENV变量
const currentEnv = envConfig.CURRENT_ENV || 'uat';

// 不能使用process.cwd(),需要使用__dirname
// 注入env配置文件,先注入的优先级高
dotenv.config({
  path: `${__dirname}/env/.env.local`
});
dotenv.config({
  path: `${__dirname}/env/.env.${currentEnv}`
});
dotenv.config({
  path: `${__dirname}/env/.env`
});

// 根据currentEnv读取配置文件,第三个参数指定为空字符串可以读取非VITE_开头的变量
const env = loadEnv(currentEnv, __dirname, '');

export default defineConfig(({
  command,
  mode
}) => {

  return {
    plugins: [uni()],
    // VITE_开头的变量可以在代码中通过import.meta.env调用,
    // 非VITE_开头的变量不会放到import.meta.env中需要在此自定义
    define: {
      __APP_ENV__: JSON.stringify(currentEnv),
      __APP_ENV_DATA__: JSON.stringify(env.ENV_DATA),
      __APP_CONFIG__: config[currentEnv]
    }
  }
})
const common = {
  commonData: 'commonData'
}
export const uat = {
  ...common,
  baseUrl: 'uat_baseUrl'
}

export const prod = {
  ...common,
  baseUrl: 'prod_baseUrl'
}

export default {
  uat,
  prod
}
COMMON_DATA = "COMMON_DATA"
VITE_CUSTOM_DATA = "VITE_CUSTOM_DATA"
CURR_ENV = 'UAT'
ENV_DATA = "UAT_DATA"
CURR_ENV = 'PROD'
ENV_DATA = "PROD_DATA"
{
  "CURRENT_ENV": ""
}

【总结】
通过HBuilderX创建的uni-app项目使用的HBuilderX的依赖,uni cli脚手架创建的uni-app项目用的是项目中package.json的配置的依赖。
因此基于uni cli创建的uni-app项目,包括若依unibest等,需要更新@dcloudio依赖至最新版并添加@dcloudio/uni-app-harmony依赖,然后参考uni-app适配HarmonyOS开发指南进行适配。
另外HBuilderX目前无法识别uni cli构建的HarmonyOS平台的产物,建议用HBuilderX导入整个uni-app项目。

更多关于HarmonyOS鸿蒙Next中uni-app基于uni cli创建的项目如何适配打包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app项目中,通过HBuilderX的“发行”菜单选择“鸿蒙”平台,并将项目编译为HarmonyOS Next的HAP包。需在manifest.json中配置鸿蒙相关的应用ID、版本号及权限,同时确保依赖的uni-app插件已支持鸿蒙。打包时,uni-app将自动生成适配鸿蒙的组件和API调用。

目前 uni-app 的 uni cli 尚未集成 HarmonyOS 的构建能力,无法直接通过命令行打包为鸿蒙应用,需借助 HBuilderX 完成适配和打包。

操作步骤简述:

  1. 在 HBuilderX 中新建 uni-app 项目(模板选择 HarmonyOS 或默认),或在 HBuilderX 中直接创建一个项目。
  2. 将原 uni cli 项目 src 目录下的页面、组件、静态资源、pages.json 等,拷贝覆盖至 HBuilderX 工程对应位置。
  3. 在 HBuilderX 中打开 manifest.json,勾选「HarmonyOS 平台」并配置包名、签名等信息。
  4. 使用 HBuilderX 的运行菜单,选择运行到鸿蒙设备进行调试,或使用发行菜单打包为 .app

注意事项:

  • 若使用了 npm 依赖,需在 HBuilderX 中重新安装或校验兼容性。
  • 当前 uni-app 对鸿蒙的支持仍在迭代,建议直接在 HBuilderX 内维护项目,或建立脚本将 CLI 项目同步至 HBuilderX 工程后再打包。
回到顶部