From a1e105eea51ec7b8962bd43eec8be8aa15d94c5b Mon Sep 17 00:00:00 2001 From: Chris Liu Date: Thu, 7 Apr 2016 07:38:23 -0700 Subject: [PATCH] react app root path can be override by env var 'react_native_app_root' Summary:This PR is to solve app build issue when node_modules is a symlink by providing an environmental variable to override the current *smart* guessing of app root path. I met this issue when I tried to setup a shared incremental node_modules directory to speed our react-native app build speed in CI. But the build crashed in step 'bundleReleaseJsAndAssets' with error messages like: > :app:bundleReleaseJsAndAssets > bundle: Created ReactPackager > uncaught error Error: NotFoundError: Cannot find entry file index.android.js in any of the roots:["/home/jenkins/shared_data"] The build is fixed by applying this patch and adding 'export react_native_app_root=${WORKSPACE}' before './gradlew assembleRelease' in build script. **Test plan** 1. react-native init demo # init a demo app from scratch 2. cd demo/android && ./gradlew assembleRelease # build works fine 3. mkdir ~/shared_data && mv ../node_modules ~/shared_data && cd .. && ln -s ~/shared_data/node_modules . # create symlink for node_modules in shared d Closes https://github.com/facebook/react-native/pull/6859 Differential Revision: D3150341 fb-gh-sync-id: efbe19b7f6b3053f18d8e568deb75d24861c27ff fbshipit-source-id: efbe19b7f6b3053f18d8e568deb75d24861c27ff --- local-cli/default.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/local-cli/default.config.js b/local-cli/default.config.js index ecc1e0a8a..57a39def0 100644 --- a/local-cli/default.config.js +++ b/local-cli/default.config.js @@ -34,6 +34,10 @@ var config = { }; function getRoots() { + var root = process.env.REACT_NATIVE_APP_ROOT; + if (root) { + return [path.resolve(root)]; + } if (__dirname.match(/node_modules[\/\\]react-native[\/\\]local-cli$/)) { // Packager is running from node_modules. // This is the default case for all projects created using 'react-native init'.