diff --git a/local-cli/core/default.config.js b/local-cli/core/default.config.js deleted file mode 100644 index ecfbed982..000000000 --- a/local-cli/core/default.config.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @flow - */ -'use strict'; - -const path = require('path'); -const flatten = require('lodash').flatten; -const android = require('./android'); -const findAssets = require('./findAssets'); -const ios = require('./ios'); -const windows = require('./windows'); -const wrapCommands = require('./wrapCommands'); -const findPlugins = require('./findPlugins'); -const findSymlinksPaths = require('../util/findSymlinksPaths'); - -function getProjectPath() { - if (__dirname.match(/node_modules[\/\\]react-native[\/\\]local-cli[\/\\]core$/)) { - // Packager is running from node_modules. - // This is the default case for all projects created using 'react-native init'. - return path.resolve(__dirname, '../../../..'); - } else if (__dirname.match(/Pods[\/\\]React[\/\\]packager$/)) { - // React Native was installed using CocoaPods. - return path.resolve(__dirname, '../../../..'); - } - return path.resolve(__dirname, '../..'); -} - -const getRNPMConfig = (folder) => - // $FlowFixMe non-literal require - require(path.join(folder, './package.json')).rnpm || {}; - -const attachPackage = (command, pkg) => Array.isArray(command) - ? command.map(cmd => attachPackage(cmd, pkg)) - : { ...command, pkg }; - -const resolveSymlink = (roots) => - roots.concat( - findSymlinksPaths( - path.join(getProjectPath(), 'node_modules'), - roots - ) - ); - -/** - * Default configuration for the CLI. - * - * If you need to override any of this functions do so by defining the file - * `rn-cli.config.js` on the root of your project with the functions you need - * to tweak. - */ -const config = { - getProjectCommands() { - const appRoot = process.cwd(); - const plugins = findPlugins([appRoot]) - .map(pathToCommands => { - const name = pathToCommands.split(path.sep)[0]; - - return attachPackage( - // $FlowFixMe non-literal require - require(path.join(appRoot, 'node_modules', pathToCommands)), - // $FlowFixMe non-literal require - require(path.join(appRoot, 'node_modules', name, 'package.json')) - ); - }); - - return flatten(plugins); - }, - getProjectConfig() { - const folder = process.cwd(); - const rnpm = getRNPMConfig(folder); - - return Object.assign({}, rnpm, { - ios: ios.projectConfig(folder, rnpm.ios || {}), - android: android.projectConfig(folder, rnpm.android || {}), - windows: windows.projectConfig(folder, rnpm.windows || {}), - assets: findAssets(folder, rnpm.assets), - }); - }, - getDependencyConfig(packageName: string) { - const folder = path.join(process.cwd(), 'node_modules', packageName); - const rnpm = getRNPMConfig( - path.join(process.cwd(), 'node_modules', packageName) - ); - - return Object.assign({}, rnpm, { - ios: ios.dependencyConfig(folder, rnpm.ios || {}), - android: android.dependencyConfig(folder, rnpm.android || {}), - windows: windows.dependencyConfig(folder, rnpm.windows || {}), - assets: findAssets(folder, rnpm.assets), - commands: wrapCommands(rnpm.commands), - params: rnpm.params || [], - }); - }, - getProjectRoots() { - const root = process.env.REACT_NATIVE_APP_ROOT; - if (root) { - return resolveSymlink([path.resolve(root)]); - } - - return resolveSymlink([getProjectPath()]); - }, -}; - -module.exports = config; diff --git a/local-cli/core/index.js b/local-cli/core/index.js index 4b05093e2..6fe4374af 100644 --- a/local-cli/core/index.js +++ b/local-cli/core/index.js @@ -10,9 +10,15 @@ */ 'use strict'; +const android = require('./android'); const Config = require('../util/Config'); +const findPlugins = require('./findPlugins'); +const findAssets = require('./findAssets'); +const ios = require('./ios'); +const windows = require('./windows'); +const wrapCommands = require('./wrapCommands'); -const defaultConfig = require('./default.config'); +const flatten = require('lodash').flatten; const minimist = require('minimist'); const path = require('path'); @@ -35,6 +41,61 @@ export type RNConfig = { getDependencyConfig(pkgName: string): Object, }; +const getRNPMConfig = (folder) => + // $FlowFixMe non-literal require + require(path.join(folder, './package.json')).rnpm || {}; + +const attachPackage = (command, pkg) => Array.isArray(command) + ? command.map(cmd => attachPackage(cmd, pkg)) + : { ...command, pkg }; + +const defaultRNConfig = { + getProjectCommands(): Array { + const appRoot = process.cwd(); + const plugins = findPlugins([appRoot]) + .map(pathToCommands => { + const name = pathToCommands.split(path.sep)[0]; + + return attachPackage( + // $FlowFixMe non-literal require + require(path.join(appRoot, 'node_modules', pathToCommands)), + // $FlowFixMe non-literal require + require(path.join(appRoot, 'node_modules', name, 'package.json')) + ); + }); + + return flatten(plugins); + }, + + getProjectConfig(): Object { + const folder = process.cwd(); + const rnpm = getRNPMConfig(folder); + + return Object.assign({}, rnpm, { + ios: ios.projectConfig(folder, rnpm.ios || {}), + android: android.projectConfig(folder, rnpm.android || {}), + windows: windows.projectConfig(folder, rnpm.windows || {}), + assets: findAssets(folder, rnpm.assets), + }); + }, + + getDependencyConfig(packageName: string) { + const folder = path.join(process.cwd(), 'node_modules', packageName); + const rnpm = getRNPMConfig( + path.join(process.cwd(), 'node_modules', packageName) + ); + + return Object.assign({}, rnpm, { + ios: ios.dependencyConfig(folder, rnpm.ios || {}), + android: android.dependencyConfig(folder, rnpm.android || {}), + windows: windows.dependencyConfig(folder, rnpm.windows || {}), + assets: findAssets(folder, rnpm.assets), + commands: wrapCommands(rnpm.commands), + params: rnpm.params || [], + }); + }, +}; + /** * Loads the CLI configuration */ @@ -44,7 +105,7 @@ function getCliConfig(): RNConfig { ? Config.loadFile(path.resolve(__dirname, cliArgs.config)) : Config.findOptional(__dirname); - return {...defaultConfig, ...config}; + return {...defaultRNConfig, ...config}; } module.exports = getCliConfig(); diff --git a/local-cli/util/Config.js b/local-cli/util/Config.js index 751ee957d..3ead4ff14 100644 --- a/local-cli/util/Config.js +++ b/local-cli/util/Config.js @@ -10,6 +10,8 @@ */ 'use strict'; +const findSymlinksPaths = require('./findSymlinksPaths'); + const blacklist = require('metro-bundler/build/blacklist'); const fs = require('fs'); const invariant = require('fbjs/lib/invariant'); @@ -111,6 +113,26 @@ export type ConfigT = { transformVariants: () => TransformVariants, }; +function getProjectPath() { + if (__dirname.match(/node_modules[\/\\]react-native[\/\\]local-cli[\/\\]util$/)) { + // Packager is running from node_modules. + // This is the default case for all projects created using 'react-native init'. + return path.resolve(__dirname, '../../../..'); + } else if (__dirname.match(/Pods[\/\\]React[\/\\]packager$/)) { + // React Native was installed using CocoaPods. + return path.resolve(__dirname, '../../../..'); + } + return path.resolve(__dirname, '../..'); +} + +const resolveSymlink = (roots) => + roots.concat( + findSymlinksPaths( + path.join(getProjectPath(), 'node_modules'), + roots + ) + ); + /** * Module capable of getting the configuration out of a given file. * @@ -126,7 +148,13 @@ const Config = { getBlacklistRE: () => blacklist(), getPlatforms: () => [], getPolyfillModuleNames: () => [], - getProjectRoots: () => [process.cwd()], + getProjectRoots: () => { + const root = process.env.REACT_NATIVE_APP_ROOT; + if (root) { + return resolveSymlink([path.resolve(root)]); + } + return resolveSymlink([getProjectPath()]); + }, getProvidesModuleNodeModules: () => providesModuleNodeModules.slice(), getSourceExts: () => [], getTransformModulePath: () => require.resolve('metro-bundler/build/transformer.js'),