From f4b738ff8edf9d96448f6315ac218be79785715b Mon Sep 17 00:00:00 2001 From: Andrew Imm Date: Fri, 2 Dec 2016 09:41:28 -0800 Subject: [PATCH] Allow custom platforms for the RN Packager on a per-project basis Reviewed By: cpojer Differential Revision: D4255979 fbshipit-source-id: bf900b67ee30e2f994e96c9a6103ed2e53a87f88 --- react-packager/src/Bundler/__tests__/Bundler-test.js | 10 ++++++++++ react-packager/src/Bundler/index.js | 7 +++++++ react-packager/src/Resolver/__tests__/Resolver-test.js | 9 +++++++++ react-packager/src/Resolver/index.js | 6 +++++- react-packager/src/Server/index.js | 4 ++++ 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/react-packager/src/Bundler/__tests__/Bundler-test.js b/react-packager/src/Bundler/__tests__/Bundler-test.js index 386bf25a..30dd121c 100644 --- a/react-packager/src/Bundler/__tests__/Bundler-test.js +++ b/react-packager/src/Bundler/__tests__/Bundler-test.js @@ -267,6 +267,16 @@ describe('Bundler', function() { ); }); + it('allows overriding the platforms array', () => { + expect(bundler._opts.platforms).toEqual(['ios', 'android', 'windows', 'web']); + const b = new Bundler({ + projectRoots, + assetServer: assetServer, + platforms: ['android', 'vr'], + }); + expect(b._opts.platforms).toEqual(['android', 'vr']); + }); + describe('getOrderedDependencyPaths', () => { beforeEach(() => { assetServer.getAssetData.mockImpl(function(relPath) { diff --git a/react-packager/src/Bundler/index.js b/react-packager/src/Bundler/index.js index 97fd41ce..f7624ad9 100644 --- a/react-packager/src/Bundler/index.js +++ b/react-packager/src/Bundler/index.js @@ -25,6 +25,7 @@ const imageSize = require('image-size'); const path = require('path'); const version = require('../../../../package.json').version; const denodeify = require('denodeify'); +const defaults = require('../../../defaults'); const { sep: pathSeparator, @@ -91,6 +92,10 @@ const validateOpts = declareOpts({ type: 'array', default: ['png'], }, + platforms: { + type: 'array', + default: defaults.platforms, + }, watch: { type: 'boolean', default: false, @@ -126,6 +131,7 @@ type Options = { getTransformOptions?: GetTransformOptions<*>, extraNodeModules: {}, assetExts: Array, + platforms: Array, watch: boolean, assetServer: AssetServer, transformTimeoutInterval: ?number, @@ -200,6 +206,7 @@ class Bundler { watch: opts.watch, minifyCode: this._transformer.minify, moduleFormat: opts.moduleFormat, + platforms: opts.platforms, polyfillModuleNames: opts.polyfillModuleNames, projectRoots: opts.projectRoots, resetCache: opts.resetCache, diff --git a/react-packager/src/Resolver/__tests__/Resolver-test.js b/react-packager/src/Resolver/__tests__/Resolver-test.js index 80f70de8..34676f45 100644 --- a/react-packager/src/Resolver/__tests__/Resolver-test.js +++ b/react-packager/src/Resolver/__tests__/Resolver-test.js @@ -107,6 +107,15 @@ describe('Resolver', function() { }); }); + it('passes custom platforms to the dependency graph', function() { + new Resolver({ // eslint-disable-line no-new + projectRoot: '/root', + platforms: ['ios', 'windows', 'vr'], + }); + const platforms = DependencyGraph.mock.calls[0][0].platforms; + expect(platforms).toEqual(['ios', 'windows', 'vr']); + }); + pit('should get dependencies with polyfills', function() { var module = createModule('index'); var deps = [module]; diff --git a/react-packager/src/Resolver/index.js b/react-packager/src/Resolver/index.js index 00fb8354..68fb1188 100644 --- a/react-packager/src/Resolver/index.js +++ b/react-packager/src/Resolver/index.js @@ -39,6 +39,10 @@ const validateOpts = declareOpts({ type: 'array', required: true, }, + platforms: { + type: 'array', + required: true, + }, cache: { type: 'object', required: true, @@ -94,7 +98,7 @@ class Resolver { (opts.blacklistRE && opts.blacklistRE.test(filepath)); }, providesModuleNodeModules: defaults.providesModuleNodeModules, - platforms: defaults.platforms, + platforms: opts.platforms, preferNativePlatform: true, watch: opts.watch, cache: opts.cache, diff --git a/react-packager/src/Server/index.js b/react-packager/src/Server/index.js index 4bbe476e..60a4f644 100644 --- a/react-packager/src/Server/index.js +++ b/react-packager/src/Server/index.js @@ -83,6 +83,10 @@ const validateOpts = declareOpts({ type: 'array', default: defaults.assetExts, }, + platforms: { + type: 'array', + default: defaults.platforms, + }, transformTimeoutInterval: { type: 'number', required: false,