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-cli
为 sourcemaps upload
命令提供了两个附加参数以简化 bundle 上传:--bundle
和 --bundle-sourcemap
。使用这些参数,你可以传递应用程序 bundle 的路径及其源映射,必要时 bundle 将在上传前自动提取:
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.0
和 react-native-sentry 0.43.1
)在处理模块数量较多的 RAM bundles 时存在上传性能问题。这将在未来的客户端版本中修复。
默认情况下,在作为 Xcode 构建步骤的一部分运行时(通常称为 "Bundle React Native Code And Images"),sentry-cli
会在后台将源映射上传到 Sentry。要使其在前台运行并跟踪其进度,你可以在 Xcode 项目配置文件 project.pbxproj
中的 sentry-cli
命令后添加 --force-foreground
参数,使命令看起来类似于:
./node_modules/@sentry/cli/bin/sentry-cli react-native xcode --force-foreground ../node_modules/react-native/scripts/react-native-xcode.sh