Skip to content

Commit

Permalink
Allow project-specific config for RN CLI using providesModuleNodeModules
Browse files Browse the repository at this point in the history
Reviewed By: davidaurelio

Differential Revision: D4409046

fbshipit-source-id: 5af0d08542935a784f4737653ccac49fd7517aff
  • Loading branch information
andrewimm authored and facebook-github-bot committed Jan 13, 2017
1 parent 09801aa commit 09a83f9
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 5 deletions.
14 changes: 10 additions & 4 deletions local-cli/bundle/buildBundle.js
Expand Up @@ -19,6 +19,7 @@ const outputBundle = require('./output/bundle');
const path = require('path');
const saveAssets = require('./saveAssets');
const defaultAssetExts = require('../../packager/defaults').assetExts;
const defaultProvidesModuleNodeModules = require('../../packager/defaults').providesModuleNodeModules;

import type {RequestOptions, OutputOptions} from './types.flow';
import type {ConfigT} from '../core';
Expand Down Expand Up @@ -63,16 +64,21 @@ function buildBundle(
typeof config.getTransformModulePath === 'function' ? config.getTransformModulePath() :
undefined;

const providesModuleNodeModules =
typeof config.getProvidesModuleNodeModules === 'function' ? config.getProvidesModuleNodeModules() :
defaultProvidesModuleNodeModules;

const options = {
projectRoots: config.getProjectRoots(),
assetExts: defaultAssetExts.concat(assetExts),
blacklistRE: config.getBlacklistRE(),
getTransformOptions: config.getTransformOptions,
transformModulePath: transformModulePath,
extraNodeModules: config.extraNodeModules,
getTransformOptions: config.getTransformOptions,
projectRoots: config.getProjectRoots(),
providesModuleNodeModules: providesModuleNodeModules,
resetCache: args.resetCache,
watch: false,
reporter: new TerminalReporter(),
transformModulePath: transformModulePath,
watch: false,
};

packagerInstance = new Server(options);
Expand Down
6 changes: 6 additions & 0 deletions local-cli/core/index.js
Expand Up @@ -11,6 +11,7 @@
'use strict';

const Config = require('../util/Config');

const defaultConfig = require('./default.config');
const minimist = require('minimist');

Expand All @@ -34,6 +35,11 @@ export type ConfigT = {
* ending in .custom.js, you would return ['custom'] here.
*/
getPlatforms: () => Array<string>,
/**
* Specify any additional node modules that should be processed for
* providesModule declarations.
*/
getProvidesModuleNodeModules?: () => Array<string>,
/**
* Returns the path to a custom transformer. This can also be overridden
* with the --transformer commandline argument.
Expand Down
5 changes: 5 additions & 0 deletions local-cli/server/runServer.js
Expand Up @@ -18,6 +18,7 @@ const copyToClipBoardMiddleware = require('./middleware/copyToClipBoardMiddlewar
const cpuProfilerMiddleware = require('./middleware/cpuProfilerMiddleware');
const defaultAssetExts = require('../../packager/defaults').assetExts;
const defaultPlatforms = require('../../packager/defaults').platforms;
const defaultProvidesModuleNodeModules = require('../../packager/defaults').providesModuleNodeModules;
const getDevToolsMiddleware = require('./middleware/getDevToolsMiddleware');
const heapCaptureMiddleware = require('./middleware/heapCaptureMiddleware.js');
const http = require('http');
Expand Down Expand Up @@ -87,6 +88,9 @@ function getPackagerServer(args, config) {
typeof config.getTransformModulePath === 'function' ? config.getTransformModulePath() :
undefined;

const providesModuleNodeModules =
args.providesModuleNodeModules || defaultProvidesModuleNodeModules;

return ReactPackager.createServer({
assetExts: defaultAssetExts.concat(args.assetExts),
blacklistRE: config.getBlacklistRE(),
Expand All @@ -95,6 +99,7 @@ function getPackagerServer(args, config) {
getTransformOptions: config.getTransformOptions,
platforms: defaultPlatforms.concat(args.platforms),
projectRoots: args.projectRoots,
providesModuleNodeModules: providesModuleNodeModules,
reporter: new TerminalReporter(),
resetCache: args.resetCache,
transformModulePath: transformModulePath,
Expand Down
10 changes: 10 additions & 0 deletions local-cli/server/server.js
Expand Up @@ -101,6 +101,16 @@ module.exports = {
description: 'Specify any additional platforms to be used by the packager',
parse: (val) => val.split(','),
default: (config) => config.getPlatforms(),
}, {
command: '--providesModuleNodeModules [list]',
description: 'Specify any npm packages that import dependencies with providesModule',
parse: (val) => val.split(','),
default: (config) => {
if (typeof config.getProvidesModuleNodeModules === 'function') {

This comment has been minimized.

Copy link
@grabbou

grabbou Jan 13, 2017

Contributor

When this cannot be a function? Shouldn't default value be used here:

 const providesModuleNodeModules =
 +    args.providesModuleNodeModules || defaultProvidesModuleNodeModules;

instead of passing null?

This comment has been minimized.

Copy link
@andrewimm

andrewimm Jan 14, 2017

Author Contributor

The fallback is provided at a deeper level, every other config option provides an "empty" default here. I guess the alternative would have been to provide [] here, and then later on the check would have been a little more complex than args.providesModuleNodeModules || defaultProvidesModuleNodeModules

There was an upgrade case I encountered where config.getProvidesModuleNodeModules was undefined, so this is to ensure people can smoothly upgrade. In the longer term, hopefully this functionality is no longer needed.

return config.getProvidesModuleNodeModules();
}
return null;
},
}, {
command: '--skipflow',
description: 'Disable flow checks'
Expand Down
2 changes: 2 additions & 0 deletions packager/react-packager/src/Bundler/index.js
Expand Up @@ -74,6 +74,7 @@ type Options = {
platforms: Array<string>,
polyfillModuleNames: Array<string>,
projectRoots: Array<string>,
providesModuleNodeModules?: Array<string>,
reporter: Reporter,
resetCache: boolean,
transformModulePath?: string,
Expand Down Expand Up @@ -154,6 +155,7 @@ class Bundler {
platforms: opts.platforms,
polyfillModuleNames: opts.polyfillModuleNames,
projectRoots: opts.projectRoots,
providesModuleNodeModules: opts.providesModuleNodeModules,
reporter: opts.reporter,
resetCache: opts.resetCache,
transformCacheKey,
Expand Down
3 changes: 2 additions & 1 deletion packager/react-packager/src/Resolver/index.js
Expand Up @@ -36,6 +36,7 @@ type Options = {
platforms: Array<string>,
polyfillModuleNames?: Array<string>,
projectRoots: Array<string>,
providesModuleNodeModules?: Array<string>,
reporter: Reporter,
resetCache: boolean,
transformCacheKey: string,
Expand Down Expand Up @@ -65,7 +66,7 @@ class Resolver {
},
platforms: opts.platforms,
preferNativePlatform: true,
providesModuleNodeModules: defaults.providesModuleNodeModules,
providesModuleNodeModules: opts.providesModuleNodeModules || defaults.providesModuleNodeModules,
reporter: opts.reporter,
resetCache: opts.resetCache,
roots: opts.projectRoots,
Expand Down
3 changes: 3 additions & 0 deletions packager/react-packager/src/Server/index.js
Expand Up @@ -63,6 +63,7 @@ type Options = {
platforms?: Array<string>,
polyfillModuleNames?: Array<string>,
projectRoots: Array<string>,
providesModuleNodeModules?: Array<string>,
reporter: Reporter,
resetCache?: boolean,
silent?: boolean,
Expand Down Expand Up @@ -178,6 +179,7 @@ class Server {
platforms: Array<string>,
polyfillModuleNames: Array<string>,
projectRoots: Array<string>,
providesModuleNodeModules?: Array<string>,
reporter: Reporter,
resetCache: boolean,
silent: boolean,
Expand Down Expand Up @@ -209,6 +211,7 @@ class Server {
platforms: options.platforms || defaults.platforms,
polyfillModuleNames: options.polyfillModuleNames || [],
projectRoots: options.projectRoots,
providesModuleNodeModules: options.providesModuleNodeModules,
reporter: options.reporter,
resetCache: options.resetCache || false,
silent: options.silent || false,
Expand Down

0 comments on commit 09a83f9

Please sign in to comment.