RAM Bundle

了解如何将我们的 React Native SDK 与 RAM Bundle 打包。

RAM bundle 格式是打包 React Native 应用程序的一种新方法,可以优化应用程序的启动时间。使用 RAM bundles,可以只加载特定功能所需的模块,并且只在需要时加载。

所有现有的 RAM bundle 格式在 Metro Bundler 文档 中有详细解释。

如果你使用 Hermes,你不应启用 RAM bundles 功能。在 Hermes 中,加载字节码时,mmap 确保整个文件不会被加载。使用 Hermes 与 RAM bundles 可能会导致问题,因为这两种机制不兼容。

要为你的应用启用 RAM bundles,请参考 官方 React Native 文档

如果你使用的是版本 0.43.1 或更新的官方 react-native-sentry 集成,则不需要额外操作。集成内部使用的 sentry-cli 会自动检测 bundle 类型,然后将提取的模块上传到 Sentry。

从版本 1.43.0 开始,sentry-clisourcemaps upload 命令提供了两个附加参数以简化 bundle 上传:--bundle--bundle-sourcemap。使用这些参数,你可以传递应用程序 bundle 的路径及其源映射,必要时 bundle 将在上传前自动提取:

Copied
node_modules/@sentry/cli/bin/sentry-cli sourcemaps upload \
    --release <release> \
    --dist <dist> \
    --strip-prefix $projectRoot/fullFolder \
    --bundle index.android.bundle \
    --bundle-sourcemap index.android.bundle.map

所有 bundle 类型(普通、Indexed RAM bundles 和 File RAM bundles)都受支持。

初始的 Sentry 对 RAM bundles 的支持(添加于 sentry-cli 1.43.0react-native-sentry 0.43.1)在处理模块数量较多的 RAM bundles 时存在上传性能问题。这将在未来的客户端版本中修复。

默认情况下,在作为 Xcode 构建步骤的一部分运行时(通常称为 "Bundle React Native Code And Images"),sentry-cli 会在后台将源映射上传到 Sentry。要使其在前台运行并跟踪其进度,你可以在 Xcode 项目配置文件 project.pbxproj 中的 sentry-cli 命令后添加 --force-foreground 参数,使命令看起来类似于:

Copied
./node_modules/@sentry/cli/bin/sentry-cli react-native xcode --force-foreground ../node_modules/react-native/scripts/react-native-xcode.sh