From 50004479f62baed5f0ac9a09f41ab3eb644b1159 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Tue, 7 May 2019 13:07:06 -0400 Subject: [PATCH 1/2] Use `require.resolve` to resolve package path --- .../config/__mocks__/resolveNodeModule.js | 12 ++++++++++++ .../config/__tests__/findDependencies-test.js | 2 ++ .../src/tools/config/__tests__/index-test.js | 2 ++ packages/cli/src/tools/config/index.js | 5 +++-- .../cli/src/tools/config/resolveNodeModule.js | 19 +++++++++++++++++++ .../tools/config/resolveReactNativePath.js | 10 +++------- 6 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 packages/cli/src/tools/config/__mocks__/resolveNodeModule.js create mode 100644 packages/cli/src/tools/config/resolveNodeModule.js diff --git a/packages/cli/src/tools/config/__mocks__/resolveNodeModule.js b/packages/cli/src/tools/config/__mocks__/resolveNodeModule.js new file mode 100644 index 000000000..38e31c79a --- /dev/null +++ b/packages/cli/src/tools/config/__mocks__/resolveNodeModule.js @@ -0,0 +1,12 @@ +/** + * @flow + */ + +const path = require('path'); + +export default function resolveNodeModule( + root: string, + packageName: string, +): string { + return path.join(root, 'node_modules', packageName); +} diff --git a/packages/cli/src/tools/config/__tests__/findDependencies-test.js b/packages/cli/src/tools/config/__tests__/findDependencies-test.js index d807cad03..449dd2df8 100644 --- a/packages/cli/src/tools/config/__tests__/findDependencies-test.js +++ b/packages/cli/src/tools/config/__tests__/findDependencies-test.js @@ -10,6 +10,8 @@ import { getTempDirectory, } from '../../../../../../jest/helpers'; +jest.mock('../resolveNodeModule'); + beforeEach(() => { cleanup(DIR); jest.resetModules(); diff --git a/packages/cli/src/tools/config/__tests__/index-test.js b/packages/cli/src/tools/config/__tests__/index-test.js index bc4821f65..ceaa1424a 100644 --- a/packages/cli/src/tools/config/__tests__/index-test.js +++ b/packages/cli/src/tools/config/__tests__/index-test.js @@ -12,6 +12,8 @@ import { import {logger} from '@react-native-community/cli-tools'; +jest.mock('../resolveNodeModule'); + const DIR = getTempDirectory('resolve_config_path_test'); // Removes string from all key/values within an object diff --git a/packages/cli/src/tools/config/index.js b/packages/cli/src/tools/config/index.js index ad3be6707..e0febe8f9 100644 --- a/packages/cli/src/tools/config/index.js +++ b/packages/cli/src/tools/config/index.js @@ -19,6 +19,7 @@ import {type ConfigT} from 'types'; import assign from '../assign'; import merge from '../merge'; +import resolveNodeModule from './resolveNodeModule'; /** * Built-in platforms */ @@ -34,10 +35,10 @@ function loadConfig(projectRoot: string = process.cwd()): ConfigT { const finalConfig = findDependencies(projectRoot).reduce( (acc: ConfigT, dependencyName) => { - const root = path.join(projectRoot, 'node_modules', dependencyName); - + let root; let config; try { + root = resolveNodeModule(projectRoot, dependencyName); config = readLegacyDependencyConfigFromDisk(root) || readDependencyConfigFromDisk(root); diff --git a/packages/cli/src/tools/config/resolveNodeModule.js b/packages/cli/src/tools/config/resolveNodeModule.js new file mode 100644 index 000000000..556031124 --- /dev/null +++ b/packages/cli/src/tools/config/resolveNodeModule.js @@ -0,0 +1,19 @@ +/** + * @flow + */ +import path from 'path'; + +/** + * Finds a path inside `node_modules` + */ +export default function resolveNodeModule( + root: string, + packageName: string, +): string { + return path.dirname( + // $FlowIssue: Wrong `require.resolve` type definition + require.resolve(path.join(packageName, 'package.json'), { + paths: [root], + }), + ); +} diff --git a/packages/cli/src/tools/config/resolveReactNativePath.js b/packages/cli/src/tools/config/resolveReactNativePath.js index d814c2a6e..2d0e1357e 100644 --- a/packages/cli/src/tools/config/resolveReactNativePath.js +++ b/packages/cli/src/tools/config/resolveReactNativePath.js @@ -1,21 +1,17 @@ /** * @flow */ -import path from 'path'; import {CLIError} from '@react-native-community/cli-tools'; +import resolveNodeModule from './resolveNodeModule'; + /** * Finds path to React Native inside `node_modules` or throws * an error otherwise. */ export default function resolveReactNativePath(root: string) { try { - return path.dirname( - // $FlowIssue: Wrong `require.resolve` type definition - require.resolve('react-native/package.json', { - paths: [root], - }), - ); + return resolveNodeModule(root, 'react-native'); } catch (_ignored) { throw new CLIError(` Unable to find React Native files. Make sure "react-native" module is installed From 08bf7af0e7845b5ef74354caeef61fc9a63e66b7 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Wed, 8 May 2019 16:04:12 -0400 Subject: [PATCH 2/2] resolveNodeModule -> resolveNodeModuleDir --- .../{resolveNodeModule.js => resolveNodeModuleDir.js} | 2 +- .../cli/src/tools/config/__tests__/findDependencies-test.js | 2 +- packages/cli/src/tools/config/__tests__/index-test.js | 2 +- packages/cli/src/tools/config/index.js | 4 ++-- .../config/{resolveNodeModule.js => resolveNodeModuleDir.js} | 2 +- packages/cli/src/tools/config/resolveReactNativePath.js | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) rename packages/cli/src/tools/config/__mocks__/{resolveNodeModule.js => resolveNodeModuleDir.js} (77%) rename packages/cli/src/tools/config/{resolveNodeModule.js => resolveNodeModuleDir.js} (87%) diff --git a/packages/cli/src/tools/config/__mocks__/resolveNodeModule.js b/packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.js similarity index 77% rename from packages/cli/src/tools/config/__mocks__/resolveNodeModule.js rename to packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.js index 38e31c79a..d85dee2ae 100644 --- a/packages/cli/src/tools/config/__mocks__/resolveNodeModule.js +++ b/packages/cli/src/tools/config/__mocks__/resolveNodeModuleDir.js @@ -4,7 +4,7 @@ const path = require('path'); -export default function resolveNodeModule( +export default function resolveNodeModuleDir( root: string, packageName: string, ): string { diff --git a/packages/cli/src/tools/config/__tests__/findDependencies-test.js b/packages/cli/src/tools/config/__tests__/findDependencies-test.js index 449dd2df8..779aeeb19 100644 --- a/packages/cli/src/tools/config/__tests__/findDependencies-test.js +++ b/packages/cli/src/tools/config/__tests__/findDependencies-test.js @@ -10,7 +10,7 @@ import { getTempDirectory, } from '../../../../../../jest/helpers'; -jest.mock('../resolveNodeModule'); +jest.mock('../resolveNodeModuleDir'); beforeEach(() => { cleanup(DIR); diff --git a/packages/cli/src/tools/config/__tests__/index-test.js b/packages/cli/src/tools/config/__tests__/index-test.js index ceaa1424a..5a1953b3a 100644 --- a/packages/cli/src/tools/config/__tests__/index-test.js +++ b/packages/cli/src/tools/config/__tests__/index-test.js @@ -12,7 +12,7 @@ import { import {logger} from '@react-native-community/cli-tools'; -jest.mock('../resolveNodeModule'); +jest.mock('../resolveNodeModuleDir'); const DIR = getTempDirectory('resolve_config_path_test'); diff --git a/packages/cli/src/tools/config/index.js b/packages/cli/src/tools/config/index.js index e0febe8f9..9c402b84e 100644 --- a/packages/cli/src/tools/config/index.js +++ b/packages/cli/src/tools/config/index.js @@ -19,7 +19,7 @@ import {type ConfigT} from 'types'; import assign from '../assign'; import merge from '../merge'; -import resolveNodeModule from './resolveNodeModule'; +import resolveNodeModuleDir from './resolveNodeModuleDir'; /** * Built-in platforms */ @@ -38,7 +38,7 @@ function loadConfig(projectRoot: string = process.cwd()): ConfigT { let root; let config; try { - root = resolveNodeModule(projectRoot, dependencyName); + root = resolveNodeModuleDir(projectRoot, dependencyName); config = readLegacyDependencyConfigFromDisk(root) || readDependencyConfigFromDisk(root); diff --git a/packages/cli/src/tools/config/resolveNodeModule.js b/packages/cli/src/tools/config/resolveNodeModuleDir.js similarity index 87% rename from packages/cli/src/tools/config/resolveNodeModule.js rename to packages/cli/src/tools/config/resolveNodeModuleDir.js index 556031124..09a0e4917 100644 --- a/packages/cli/src/tools/config/resolveNodeModule.js +++ b/packages/cli/src/tools/config/resolveNodeModuleDir.js @@ -6,7 +6,7 @@ import path from 'path'; /** * Finds a path inside `node_modules` */ -export default function resolveNodeModule( +export default function resolveNodeModuleDir( root: string, packageName: string, ): string { diff --git a/packages/cli/src/tools/config/resolveReactNativePath.js b/packages/cli/src/tools/config/resolveReactNativePath.js index 2d0e1357e..dbce4e5c8 100644 --- a/packages/cli/src/tools/config/resolveReactNativePath.js +++ b/packages/cli/src/tools/config/resolveReactNativePath.js @@ -3,7 +3,7 @@ */ import {CLIError} from '@react-native-community/cli-tools'; -import resolveNodeModule from './resolveNodeModule'; +import resolveNodeModuleDir from './resolveNodeModuleDir'; /** * Finds path to React Native inside `node_modules` or throws @@ -11,7 +11,7 @@ import resolveNodeModule from './resolveNodeModule'; */ export default function resolveReactNativePath(root: string) { try { - return resolveNodeModule(root, 'react-native'); + return resolveNodeModuleDir(root, 'react-native'); } catch (_ignored) { throw new CLIError(` Unable to find React Native files. Make sure "react-native" module is installed