React NativeのアプリにはJS層とNative層があり、ビルドは別々に行われます。基本的にネイティブでビルドするときには最新のJS bundleに変更したいはずなので、同時にjs bundleも行われます。
iOS
iOSではあらかじめXcodeのBuild Phase
に組み込まれているため、リリースビルドする際には自動的にmain.jsbundle
というファイルが事前に作られた上で、これを同梱する形でビルドが行われます。
Xcodeで指定しているシェルスクリプト、node_modules/react-native/scripts/react-native-xcode.sh
を見るとreact-native
のCLIコマンドでjsbundleを作っていることがわかります。
Android
androidの場合はnode_modules/react-native/react.gradle
にコマンド呼び出しの記載があります。
def currentBundleTask = tasks.create(
name: bundleJsAndAssetsTaskName,
type: Exec) {
// 略
commandLine(*nodeExecutableAndArgs, cliPath, "bundle", "--platform", "android", "--dev", "${devEnabled}", "--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir, *extraPackagerArgs)
enabled config."bundleIn${targetName}" || config."bundleIn${buildTypeName.capitalize()}" ?: targetName.toLowerCase().contains("release")
}
app/build.gradle
側の設定もしくはreleaseビルドの際にbundleが作られるようです。
という、ビルド周りのコードをちょっと読んだよという話でした。