Fix default projectRoot + watchFolders computation

Summary:
@public

This diff fixes the `projectRoot` calculation on React Native when the app does not have a config file. This should fix the issues reported in https://github.com/facebook/react-native/issues/20712

Reviewed By: hramos

Differential Revision: D9444982

fbshipit-source-id: 4cb41fa5224d2addf92976cc119e49dea6a6346b
This commit is contained in:
Rafael Oleza 2018-08-22 20:23:11 -07:00 committed by Facebook Github Bot
parent b620ccab49
commit 9a77ff593b
1 changed files with 7 additions and 9 deletions

View File

@ -21,7 +21,7 @@ const {loadConfig} = require('metro-config');
*/
import type {ConfigT} from 'metro-config/src/configTypes.flow';
function getProjectPath() {
function getProjectRoot() {
if (
__dirname.match(/node_modules[\/\\]react-native[\/\\]local-cli[\/\\]util$/)
) {
@ -44,12 +44,12 @@ const resolveSymlinksForRoots = roots =>
[...roots],
);
const getProjectRoots = () => {
const getWatchFolders = () => {
const root = process.env.REACT_NATIVE_APP_ROOT;
if (root) {
return resolveSymlinksForRoots([path.resolve(root)]);
}
return resolveSymlinksForRoots([getProjectPath()]);
return [];
};
const getBlacklistRE = () => {
@ -76,17 +76,15 @@ const Config = {
],
getPolyfills,
},
watchFolders: [getProjectPath(), ...getProjectRoots()],
watchFolders: getWatchFolders(),
transformModulePath: require.resolve('metro/src/reactNativeTransformer'),
},
getProjectPath,
getProjectRoots,
async load(configFile: ?string): Promise<ConfigT> {
const argv = {cwd: getProjectRoot()};
return await loadConfig(
configFile ? {config: configFile} : {},
configFile ? {...argv, config: configFile} : argv,
this.DEFAULT,
);
},