Permalink
Browse files

Allow custom platforms for the RN Packager on a per-project basis

Reviewed By: cpojer

Differential Revision: D4255979

fbshipit-source-id: bf900b67ee30e2f994e96c9a6103ed2e53a87f88
  • Loading branch information...
andrewimm authored and mkonicek committed Dec 2, 2016
1 parent cd8cfc3 commit 5b37c3edb06acb0823f8eb8a0233bb7e04ea90e0
@@ -34,6 +34,15 @@ var config = {
return [];
},
/**
* Specify any additional platforms to be used by the packager.
* For example, if you want to add a "custom" platform, and use modules
* ending in .custom.js, you would return ['custom'] here.
*/
getPlatforms() {
return [];
},
/**
* Returns a regular expression for modules that should be ignored by the
* packager on a given platform.
@@ -16,6 +16,7 @@ const connect = require('connect');
const copyToClipBoardMiddleware = require('./middleware/copyToClipBoardMiddleware');
const cpuProfilerMiddleware = require('./middleware/cpuProfilerMiddleware');
const defaultAssetExts = require('../../packager/defaults').assetExts;
const defaultPlatforms = require('../../packager/defaults').platforms;
const getDevToolsMiddleware = require('./middleware/getDevToolsMiddleware');
const heapCaptureMiddleware = require('./middleware/heapCaptureMiddleware.js');
const http = require('http');
@@ -91,6 +92,7 @@ function getPackagerServer(args, config) {
cacheVersion: '3',
extraNodeModules: config.extraNodeModules,
getTransformOptions: config.getTransformOptions,
platforms: defaultPlatforms.concat(args.platforms),
projectRoots: args.projectRoots,
resetCache: args.resetCache,
transformModulePath: transformModulePath,
@@ -96,6 +96,11 @@ module.exports = {
description: 'Specify any additional asset extentions to be used by the packager',
parse: (val) => val.split(','),
default: (config) => config.getAssetExts(),
}, {
command: '--platforms [list]',
description: 'Specify any additional platforms to be used by the packager',
parse: (val) => val.split(','),
default: (config) => config.getPlatforms(),
}, {
command: '--skipflow',
description: 'Disable flow checks'
@@ -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) {
@@ -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<string>,
platforms: Array<string>,
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,
@@ -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];
@@ -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,
@@ -83,6 +83,10 @@ const validateOpts = declareOpts({
type: 'array',
default: defaults.assetExts,
},
platforms: {
type: 'array',
default: defaults.platforms,
},
transformTimeoutInterval: {
type: 'number',
required: false,

0 comments on commit 5b37c3e

Please sign in to comment.