From 8295938982533d7960614be0c1d14f252da07a5a Mon Sep 17 00:00:00 2001 From: grabbou Date: Fri, 18 Oct 2019 14:50:29 +0200 Subject: [PATCH 01/10] Initial commit --- packages/cli/src/commands/server/runServer.ts | 29 ++-------- packages/cli/src/commands/server/server.ts | 55 ------------------- packages/cli/src/tools/loadMetroConfig.ts | 36 ++++++------ 3 files changed, 24 insertions(+), 96 deletions(-) diff --git a/packages/cli/src/commands/server/runServer.ts b/packages/cli/src/commands/server/runServer.ts index 968297ebe..4a69b8865 100644 --- a/packages/cli/src/commands/server/runServer.ts +++ b/packages/cli/src/commands/server/runServer.ts @@ -20,22 +20,16 @@ import loadMetroConfig from '../../tools/loadMetroConfig'; import releaseChecker from '../../tools/releaseChecker'; export type Args = { - assetPlugins?: string[]; - cert?: string; customLogReporterPath?: string; + config?: string; + + cert?: string; + key?: string; host?: string; https?: boolean; - maxWorkers?: number; - key?: string; - platforms?: string[]; - port?: number; resetCache?: boolean; - sourceExts?: string[]; - transformer?: string; + verbose?: boolean; - watchFolders?: string[]; - config?: string; - projectRoot?: string; }; async function runServer(_argv: Array, ctx: Config, args: Args) { @@ -44,22 +38,11 @@ async function runServer(_argv: Array, ctx: Config, args: Args) { const reporter = new ReporterImpl(terminal); const metroConfig = await loadMetroConfig(ctx, { - config: args.config, - maxWorkers: args.maxWorkers, - port: args.port, resetCache: args.resetCache, - watchFolders: args.watchFolders, - projectRoot: args.projectRoot, - sourceExts: args.sourceExts, + config: args.config, reporter, }); - if (args.assetPlugins) { - metroConfig.transformer.assetPlugins = args.assetPlugins.map(plugin => - require.resolve(plugin), - ); - } - const middlewareManager = new MiddlewareManager({ host: args.host, port: metroConfig.server.port, diff --git a/packages/cli/src/commands/server/server.ts b/packages/cli/src/commands/server/server.ts index d7c7b86ca..2e4bc6b29 100644 --- a/packages/cli/src/commands/server/server.ts +++ b/packages/cli/src/commands/server/server.ts @@ -5,7 +5,6 @@ * LICENSE file in the root directory of this source tree. * */ - import path from 'path'; import runServer from './runServer'; @@ -22,60 +21,6 @@ export default { name: '--host [string]', default: '', }, - { - name: '--projectRoot [path]', - description: 'Path to a custom project root', - parse: (val: string) => path.resolve(val), - }, - { - name: '--watchFolders [list]', - description: - 'Specify any additional folders to be added to the watch list', - parse: (val: string) => - val.split(',').map((folder: string) => path.resolve(folder)), - }, - { - name: '--assetPlugins [list]', - description: - 'Specify any additional asset plugins to be used by the packager by full filepath', - parse: (val: string) => val.split(','), - }, - { - name: '--assetExts [list]', - description: - 'Specify any additional asset extensions to be used by the packager', - parse: (val: string) => val.split(','), - }, - { - name: '--sourceExts [list]', - description: - 'Specify any additional source extensions to be used by the packager', - parse: (val: string) => val.split(','), - }, - { - name: '--platforms [list]', - description: - 'Specify any additional platforms to be used by the packager', - parse: (val: string) => val.split(','), - }, - { - name: '--providesModuleNodeModules [list]', - description: - 'Specify any npm packages that import dependencies with providesModule', - parse: (val: string) => val.split(','), - }, - { - name: '--max-workers [number]', - description: - 'Specifies the maximum number of workers the worker-pool ' + - 'will spawn for transforming files. This defaults to the number of the ' + - 'cores available on your machine.', - parse: (workers: string) => Number(workers), - }, - { - name: '--transformer [string]', - description: 'Specify a custom transformer to be used', - }, { name: '--reset-cache, --resetCache', description: 'Removes cached files', diff --git a/packages/cli/src/tools/loadMetroConfig.ts b/packages/cli/src/tools/loadMetroConfig.ts index 7e4609007..8deebcb8d 100644 --- a/packages/cli/src/tools/loadMetroConfig.ts +++ b/packages/cli/src/tools/loadMetroConfig.ts @@ -9,6 +9,7 @@ import {loadConfig} from 'metro-config'; import {existsSync} from 'fs'; import {Config} from '@react-native-community/cli-types'; import findSymlinkedModules from './findSymlinkedModules'; +import {options} from '@hapi/joi'; function resolveSymlinksForRoots(roots: string[]): string[] { return roots.reduce( @@ -62,13 +63,22 @@ export interface MetroConfig { reporter?: any; } +export interface ConfigOptions { + resetCache?: boolean; + config?: string; + reporter?: any; +} + /** * Default configuration * * @todo(grabbou): As a separate PR, haste.platforms should be added before "native". * Otherwise, a.native.js will not load on Windows or other platforms */ -export const getDefaultConfig = (ctx: Config): MetroConfig => { +export const getDefaultConfig = ( + ctx: Config, + opts: ConfigOptions, +): MetroConfig => { const hasteImplPath = path.join(ctx.reactNativePath, 'jest/hasteImpl.js'); return { resolver: { @@ -110,20 +120,10 @@ export const getDefaultConfig = (ctx: Config): MetroConfig => { ), }, watchFolders: getWatchFolders(), + reporter: opts.reporter, }; }; -export interface ConfigOptionsT { - maxWorkers?: number; - port?: number; - projectRoot?: string; - resetCache?: boolean; - watchFolders?: string[]; - sourceExts?: string[]; - reporter?: any; - config?: string; -} - /** * Loads Metro Config and applies `options` on top of the resolved config. * @@ -131,11 +131,11 @@ export interface ConfigOptionsT { */ export default function load( ctx: Config, - options?: ConfigOptionsT, + opts: ConfigOptions = {}, ): Promise { - const defaultConfig = getDefaultConfig(ctx); - if (options && options.reporter) { - defaultConfig.reporter = options.reporter; - } - return loadConfig({cwd: ctx.root, ...options}, defaultConfig); + const defaultConfig = getDefaultConfig(ctx, opts); + return loadConfig( + {cwd: ctx.root, resetCache: opts.resetCache, config: opts.config}, + defaultConfig, + ); } From 18f365d709d96380453ffea9d3e8866fecd60eb3 Mon Sep 17 00:00:00 2001 From: grabbou Date: Fri, 18 Oct 2019 15:04:40 +0200 Subject: [PATCH 02/10] Update text --- packages/cli/src/commands/server/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/server/server.ts b/packages/cli/src/commands/server/server.ts index 2e4bc6b29..77c5fc478 100644 --- a/packages/cli/src/commands/server/server.ts +++ b/packages/cli/src/commands/server/server.ts @@ -48,7 +48,7 @@ export default { }, { name: '--config [string]', - description: 'Path to the CLI configuration file', + description: 'Path to a custom Metro configuration file', parse: (val: string) => path.resolve(val), }, ], From 936ddf3052b5117de804e973834995360453b861 Mon Sep 17 00:00:00 2001 From: grabbou Date: Fri, 18 Oct 2019 15:05:13 +0200 Subject: [PATCH 03/10] Fix linter --- packages/cli/src/tools/loadMetroConfig.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/src/tools/loadMetroConfig.ts b/packages/cli/src/tools/loadMetroConfig.ts index 8deebcb8d..687476e5f 100644 --- a/packages/cli/src/tools/loadMetroConfig.ts +++ b/packages/cli/src/tools/loadMetroConfig.ts @@ -9,7 +9,6 @@ import {loadConfig} from 'metro-config'; import {existsSync} from 'fs'; import {Config} from '@react-native-community/cli-types'; import findSymlinkedModules from './findSymlinkedModules'; -import {options} from '@hapi/joi'; function resolveSymlinksForRoots(roots: string[]): string[] { return roots.reduce( From 5c3b3ff9aafa601ca4f3a23003094c9c08c8930f Mon Sep 17 00:00:00 2001 From: grabbou Date: Fri, 18 Oct 2019 15:07:39 +0200 Subject: [PATCH 04/10] Clean up diff --- packages/cli/src/commands/server/runServer.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/commands/server/runServer.ts b/packages/cli/src/commands/server/runServer.ts index 4a69b8865..7a8783fea 100644 --- a/packages/cli/src/commands/server/runServer.ts +++ b/packages/cli/src/commands/server/runServer.ts @@ -20,15 +20,13 @@ import loadMetroConfig from '../../tools/loadMetroConfig'; import releaseChecker from '../../tools/releaseChecker'; export type Args = { - customLogReporterPath?: string; - config?: string; - cert?: string; + customLogReporterPath?: string; key?: string; + config?: string; host?: string; https?: boolean; resetCache?: boolean; - verbose?: boolean; }; @@ -38,8 +36,8 @@ async function runServer(_argv: Array, ctx: Config, args: Args) { const reporter = new ReporterImpl(terminal); const metroConfig = await loadMetroConfig(ctx, { - resetCache: args.resetCache, config: args.config, + resetCache: args.resetCache, reporter, }); From 872f561231af42d1e1c32b3d044199677fd21e89 Mon Sep 17 00:00:00 2001 From: grabbou Date: Fri, 18 Oct 2019 15:09:11 +0200 Subject: [PATCH 05/10] Clean up --- packages/cli/src/commands/server/runServer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/server/runServer.ts b/packages/cli/src/commands/server/runServer.ts index 7a8783fea..9a76ab02b 100644 --- a/packages/cli/src/commands/server/runServer.ts +++ b/packages/cli/src/commands/server/runServer.ts @@ -22,12 +22,12 @@ import releaseChecker from '../../tools/releaseChecker'; export type Args = { cert?: string; customLogReporterPath?: string; - key?: string; - config?: string; host?: string; https?: boolean; + key?: string; resetCache?: boolean; verbose?: boolean; + config?: string; }; async function runServer(_argv: Array, ctx: Config, args: Args) { From bfc8d4eee8611872d371d7909f1ba81b5b2d8d6e Mon Sep 17 00:00:00 2001 From: grabbou Date: Tue, 5 Nov 2019 16:18:34 +0100 Subject: [PATCH 06/10] Bring back the port command --- packages/cli/src/commands/server/runServer.ts | 1 + packages/cli/src/tools/loadMetroConfig.ts | 24 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/commands/server/runServer.ts b/packages/cli/src/commands/server/runServer.ts index 9a76ab02b..90e76550c 100644 --- a/packages/cli/src/commands/server/runServer.ts +++ b/packages/cli/src/commands/server/runServer.ts @@ -25,6 +25,7 @@ export type Args = { host?: string; https?: boolean; key?: string; + port?: number; resetCache?: boolean; verbose?: boolean; config?: string; diff --git a/packages/cli/src/tools/loadMetroConfig.ts b/packages/cli/src/tools/loadMetroConfig.ts index 687476e5f..a27347d4d 100644 --- a/packages/cli/src/tools/loadMetroConfig.ts +++ b/packages/cli/src/tools/loadMetroConfig.ts @@ -62,11 +62,25 @@ export interface MetroConfig { reporter?: any; } -export interface ConfigOptions { +/** + * Options that can be used to tweak the default configuration + * that is later passed to Metro + */ +type DefaultConfigOptions = { + port?: number; + reporter?: any; +}; + +/** + * Options that change the behaviour of Metro built-in `loadConfig` + * function + * + * Details here: https://github.com/facebook/metro/blob/master/packages/metro-config/src/loadConfig.js#L28-L45 + */ +export type ConfigOptions = DefaultConfigOptions & { resetCache?: boolean; config?: string; - reporter?: any; -} +}; /** * Default configuration @@ -76,7 +90,7 @@ export interface ConfigOptions { */ export const getDefaultConfig = ( ctx: Config, - opts: ConfigOptions, + opts: DefaultConfigOptions, ): MetroConfig => { const hasteImplPath = path.join(ctx.reactNativePath, 'jest/hasteImpl.js'); return { @@ -99,7 +113,7 @@ export const getDefaultConfig = ( require(path.join(ctx.reactNativePath, 'rn-get-polyfills'))(), }, server: { - port: Number(process.env.RCT_METRO_PORT) || 8081, + port: Number(process.env.RCT_METRO_PORT) || opts.port || 8081, }, symbolicator: { customizeFrame: (frame: {file: string | null}) => { From f2fcc0aaaf267756574e613d2f652f5190fd84b8 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Tue, 5 Nov 2019 16:45:00 +0100 Subject: [PATCH 07/10] Update packages/cli/src/commands/server/server.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Michał Pierzchała --- packages/cli/src/commands/server/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/server/server.ts b/packages/cli/src/commands/server/server.ts index 77c5fc478..d4a0c7d22 100644 --- a/packages/cli/src/commands/server/server.ts +++ b/packages/cli/src/commands/server/server.ts @@ -47,7 +47,7 @@ export default { description: 'Path to custom SSL cert', }, { - name: '--config [string]', + name: '--metroConfig [string]', description: 'Path to a custom Metro configuration file', parse: (val: string) => path.resolve(val), }, From 7b4d31584651dc146bf331e0fabb3c44b51dd149 Mon Sep 17 00:00:00 2001 From: grabbou Date: Tue, 5 Nov 2019 16:46:43 +0100 Subject: [PATCH 08/10] Update metroConfig in one more place --- packages/cli/src/commands/server/runServer.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/server/runServer.ts b/packages/cli/src/commands/server/runServer.ts index 90e76550c..c644e1334 100644 --- a/packages/cli/src/commands/server/runServer.ts +++ b/packages/cli/src/commands/server/runServer.ts @@ -28,7 +28,7 @@ export type Args = { port?: number; resetCache?: boolean; verbose?: boolean; - config?: string; + metroConfig?: string; }; async function runServer(_argv: Array, ctx: Config, args: Args) { @@ -37,7 +37,8 @@ async function runServer(_argv: Array, ctx: Config, args: Args) { const reporter = new ReporterImpl(terminal); const metroConfig = await loadMetroConfig(ctx, { - config: args.config, + config: args.metroConfig, + port: args.port, resetCache: args.resetCache, reporter, }); From f5a3ac544c966cd869700350d69776ad447cb1a1 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Thu, 14 Nov 2019 15:19:42 +0100 Subject: [PATCH 09/10] Update loadMetroConfig.ts --- packages/cli/src/tools/loadMetroConfig.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/src/tools/loadMetroConfig.ts b/packages/cli/src/tools/loadMetroConfig.ts index 056a3b845..bb7f2dc5f 100644 --- a/packages/cli/src/tools/loadMetroConfig.ts +++ b/packages/cli/src/tools/loadMetroConfig.ts @@ -86,7 +86,6 @@ export const getDefaultConfig = ( ctx: Config, opts: DefaultConfigOptions, ): MetroConfig => { - const hasteImplPath = path.join(ctx.reactNativePath, 'jest/hasteImpl.js'); return { resolver: { resolverMainFields: ['react-native', 'browser', 'main'], From a513d1d11d449d1692b0eba8ecf365f8b4693be5 Mon Sep 17 00:00:00 2001 From: grabbou Date: Thu, 14 Nov 2019 17:42:37 +0100 Subject: [PATCH 10/10] Update documentation --- docs/commands.md | 36 ++---------------------------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/docs/commands.md b/docs/commands.md index 111ef9cee..ed3e32ef8 100644 --- a/docs/commands.md +++ b/docs/commands.md @@ -445,38 +445,6 @@ Starts the server that communicates with connected devices Specify port to listen on -#### `--projectRoot [path]` - -Path to a custom project root - -#### `--watchFolders [list]` - -Specify any additional folders to be added to the watch list - -#### `--assetExts [list]` - -Specify any additional asset extensions to be used by the packager - -#### `--sourceExts [list]` - -Specify any additional source extensions to be used by the packager - -#### `--platforms [list]` - -Specify any additional platforms to be used by the packager - -#### `--providesModuleNodeModules [list]` - -Specify any npm packages that import dependencies with providesModule - -#### `--max-workers [number]` - -Specifies the maximum number of workers the worker-pool will spawn for transforming files. This defaults to the number of the cores available on your machine - -#### `--transformer [string]` - -Specify a custom transformer to be used - #### `--reset-cache, --resetCache` Removes cached files @@ -501,9 +469,9 @@ Path to custom SSL key Path to custom SSL cert -#### `--config [string]` +#### `--metroConfig [string]` -Path to the CLI configuration file +Path to the Metro configuration file (to overwrite the one detected automatically) ### `uninstall`