Herina
Build bundle with Herina.
GitHub
介绍
Herina 是为 React Native App 提供动态化能力的开发套件。它提供了简单易用的 JS API 能够让您轻而易举地为您的 App 加入热更新功能。此外,您还可以使用 import()
从外部动态引入模块,此功能无需任何额外配置。
在底层,Herina 使用 Metro
作为 Bundle 构建工具。它就像 Vite 和 Rollup 或 ESBuild 的关系一样。当构建完成后,它生成 Bundle 的 AST 来分析代码并将模块拆分到不同类型的 Chunk。
功能特性
- 构建 Bundle
- 将 Bundle 拆分为多个 Chunk
- 动态引入
- 构建和应用递增式更新
- 简单易用的 JS API
- 自动重置 Bundle 当发生错误
- 支持 iOS、Android
- 支持 TypeScript
安装
yarn add @herina-rn/core @herina-rn/client
cd ios && pod install
代码拆分
Herina 将 Bundle 拆分为三种 Chunk:
- 业务: 包含 App 的业务代码;
- 动态: 包含使用
import(...)
引入的模块; - 小贩: 包含
node_modules
内的依赖与 Herina 运行时
使用方式
有两种更新方式:全量更新、递增式更新。
在更新之前,您必须通过调用 registerUpdateManager
注册 UpdateManager
。第一个参数是可选的,它代表被下载资源的基础 URL。若此参数未被定义,它将读取原始 Bundle 内的基础 URL。
import { registerUpdateManager } from "@herina-rn/client";
const manager = registerUpdateManager("https://hector.im");
全量更新
通过全量更新,从您的服务器所下载的新 Bundle 将直接替换原始 Bundle.
import { getUpdateManager } from "@herina-rn/client";
const onUpdateBundle = async () => {
// 已调用 `registerUpdateManager`
const manager = getUpdateManager();
await manager.requestBundleUpdate();
// 若此参数是真的,App 将在 Bundle 被替换后重新加载。
manager.applyBundleUpdate(true);
};
递增式更新
通过递增式更新,运行时将发送一个请求获知是否有可用的递增式更新,若有可用的更新,将下载更新然后生成一个新的 Bundle 来替换原始 Bundle。
import { getUpdateManager } from "@herina-rn/client";
const onUpdateByIncremental = async () => {
const manager = getUpdateManager();
await manager.requestIncrementalUpdates();
manager.applyIncrementalUpdate(true);
};
使用要求
为使用 Herina,您需要修改原生代码。若您无 iOS 或 Android 原生开发经验,您可参考文档的 configuration
章节。
使用限制
目前 Herina 仅用于生产模式,并不输出 Sourcemap。若您正在使用如 Sentry 这样的性能监控器,我正在工作为它提供支持。
联系人 & 支持
Herina 按现状被提供。供您参考,Herina 目前是我的工作之一,但这不意味这是永久的。我将努力抽出时间提供技术支持如果我被转移到另一项工作。
不要犹豫打开问题或拉取请求。如果您有想法与我分享,您可联系我,我会尽快回复。
License
MIT