文章目录
一、背景
跨平台开发是日后开发的主流,这里记录学习RN跨平台开发的过程,为日后的工作做准备。
二、环境安装
-
安装 Node.js
访问Node.js官网下载并安装LTS版本。 -
查看node版本
node -v
-
npm版本
npm -v
三、创建第一个程序
在终端运行
npx react-native@0.72.5 init yourAppName --version 0.72.5
注意: react-native init 命令已经被废弃了,不要在使用这个命令创建项目。
需要在0.72.5版本下创建,否则不能适配鸿蒙环境
四、添加鸿蒙环境依赖
-
MyRNProject文件夹,找到package.json

-
在 scripts 下新增 OpenHarmony 的依赖, 添加依赖后的package.json文件如下所示。
{
"name": "AwesomeProject",
"version": "0.0.1",
"private": true,
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"lint": "eslint .",
"start": "react-native start",
"test": "jest",
"dev": "react-native bundle-harmony --dev"
},
"dependencies": {
"react": "18.2.0",
"react-native": "0.72.5"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@babel/preset-env": "^7.20.0",
"@babel/runtime": "^7.20.0",
"@react-native/eslint-config": "^0.72.2",
"@react-native/metro-config": "^0.72.11",
"@tsconfig/react-native": "^3.0.0",
"@types/react": "^18.0.24",
"@types/react-test-renderer": "^18.0.0",
"babel-jest": "^29.2.1",
"eslint": "^8.19.0",
"jest": "^29.2.1",
"metro-react-native-babel-preset": "0.76.8",
"prettier": "^2.4.1",
"react-test-renderer": "18.2.0",
"typescript": "4.8.4"
},
"engines": {
"node": ">=16"
}
} -
配置metro.config.js并添加OpenHarmony适配代码 右键选择记事本打开 AwsomeProject\metro.config.js,并添加 OpenHarmony 的适配代码。配置文件的详细介绍,可以参考React Native 中文网。修改完成后的文件内容如下:
const {mergeConfig, getDefaultConfig} = require('@react-native/metro-config');
const {createHarmonyMetroConfig} = require('@react-native-oh/react-native-harmony/metro.config');/**
- @type {import("metro-config").ConfigT}
*/
const config = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
},
};
module.exports = mergeConfig(getDefaultConfig(__dirname), createHarmonyMetroConfig({
reactNativeHarmonyPackageName: '@react-native-oh/react-native-harmony',
}), config); - @type {import("metro-config").ConfigT}
-
在 AwesomeProject 目录下运行生成 bundle 文件的命令。
npm run dev
成功结果

如遇报错:error: unknown command 'bundle-harmony',需要手动在
package.json文件中添加依赖:
"memfs":"^4.17.2"
运行成功后,会在your project/harmony/entry/src/main/resources/rawfile 目录下生成 bundle.harmony.js 和 assets 文件夹,assets 用来存放图片(如果 bundle 中不涉及本地图片,则没有 assets 文件夹):
- 将bundle 文件和 assets 文件夹粘贴复制到HarmonyOS工程MyRNApplication\entry\src\main\resources\rawfile路径下,在 entry/src/main/ets/pages/Index.ets 中使用。