I'm setting up a Bazel build for a React-Native Android project. Since I won't be using Android Studio and Gradle I need to call the react-native cli to create the RN bundle. I've tried several combinations of genrule
and nodejs_binary
rules as well as calls to react-native
, npx react-native
, and react-native\cli.js
. These attempts have ended in one of two errors:
1)
error Unrecognized command "bundle".
debug We couldn't find a package.json in your project. Are you sure you are running it inside a React Native project?
2)
Error: EPERM: operation not permitted, chmod '/private/var/tmp/_bazel_joshnunez/bfd4b860cd0c2d2f0e40baa90bf393fd/sandbox/darwin-sandbox/471/execroot/native_modules/bazel-out/host/bin/external/androi
d_sample/src/rncli.sh.runfiles/npm/node_modules/@react-native-community/cli/build/commands/server/external/xsel'
Here are the bazel rules I'm using (many permutations commented out with #):
nodejs_binary(
name = "rncli",
entry_point = "@npm//:node_modules/react-native/local-cli/cli.js",
node_modules = "@npm//:node_modules"
)
genrule (
name = "rnAndroidBundle",
outs = [ "main/assets/index.android.bundle" ],
cmd = "$(location :rncli) bundle --verbose --entry-file $(location :appEntry) --platform android --bundle-output $@",
#cmd = "npm run react-native bundle --verbose --entry-file $(location :appEntry) --platform android --bundle-output $@",
#cmd = "npx react-native bundle --verbose --entry-file $(location :appEntry) --platform android --bundle-output $@",
#cmd = "$(location @npm//:node_modules/react-native/cli.js) bundle --verbose --entry-file $(location :appEntry) --platform android --bundle-output $@",
#cmd = "node node_modules/react-native/local-cli/cli.js bundle --verbose --entry-file $(location :appEntry) --platform android --bundle-output $@",
#cmd = "node $(location @npm//react-native:node_modules/react-native/cli.js) bundle --verbose --entry-file external/android_sample/src/app.tsx --platform android --bundle-output $@",
#srcs = [ "@npm//react-native" ],
srcs = [ "appEntry" ],
#tools = [ "@npm//:node_modules/react-native/cli.js" ]
tools = [ ":rncli" ]
)
filegroup (
name = "appEntry",
srcs = [ "app.tsx" ]
)