Allow custom platforms for the RN Packager on a per-project basis
Reviewed By: cpojer Differential Revision: D4255979 fbshipit-source-id: bf900b67ee30e2f994e96c9a6103ed2e53a87f88
This commit is contained in:
parent
59dd2133cb
commit
67828a52bd
|
@ -34,6 +34,15 @@ var config = {
|
||||||
return [];
|
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
|
* Returns a regular expression for modules that should be ignored by the
|
||||||
* packager on a given platform.
|
* packager on a given platform.
|
||||||
|
|
|
@ -16,6 +16,7 @@ const connect = require('connect');
|
||||||
const copyToClipBoardMiddleware = require('./middleware/copyToClipBoardMiddleware');
|
const copyToClipBoardMiddleware = require('./middleware/copyToClipBoardMiddleware');
|
||||||
const cpuProfilerMiddleware = require('./middleware/cpuProfilerMiddleware');
|
const cpuProfilerMiddleware = require('./middleware/cpuProfilerMiddleware');
|
||||||
const defaultAssetExts = require('../../packager/defaults').assetExts;
|
const defaultAssetExts = require('../../packager/defaults').assetExts;
|
||||||
|
const defaultPlatforms = require('../../packager/defaults').platforms;
|
||||||
const getDevToolsMiddleware = require('./middleware/getDevToolsMiddleware');
|
const getDevToolsMiddleware = require('./middleware/getDevToolsMiddleware');
|
||||||
const heapCaptureMiddleware = require('./middleware/heapCaptureMiddleware.js');
|
const heapCaptureMiddleware = require('./middleware/heapCaptureMiddleware.js');
|
||||||
const http = require('http');
|
const http = require('http');
|
||||||
|
@ -91,6 +92,7 @@ function getPackagerServer(args, config) {
|
||||||
cacheVersion: '3',
|
cacheVersion: '3',
|
||||||
extraNodeModules: config.extraNodeModules,
|
extraNodeModules: config.extraNodeModules,
|
||||||
getTransformOptions: config.getTransformOptions,
|
getTransformOptions: config.getTransformOptions,
|
||||||
|
platforms: defaultPlatforms.concat(args.platforms),
|
||||||
projectRoots: args.projectRoots,
|
projectRoots: args.projectRoots,
|
||||||
resetCache: args.resetCache,
|
resetCache: args.resetCache,
|
||||||
transformModulePath: transformModulePath,
|
transformModulePath: transformModulePath,
|
||||||
|
|
|
@ -96,6 +96,11 @@ module.exports = {
|
||||||
description: 'Specify any additional asset extentions to be used by the packager',
|
description: 'Specify any additional asset extentions to be used by the packager',
|
||||||
parse: (val) => val.split(','),
|
parse: (val) => val.split(','),
|
||||||
default: (config) => config.getAssetExts(),
|
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',
|
command: '--skipflow',
|
||||||
description: 'Disable flow checks'
|
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', () => {
|
describe('getOrderedDependencyPaths', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
assetServer.getAssetData.mockImpl(function(relPath) {
|
assetServer.getAssetData.mockImpl(function(relPath) {
|
||||||
|
|
|
@ -25,6 +25,7 @@ const imageSize = require('image-size');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const version = require('../../../../package.json').version;
|
const version = require('../../../../package.json').version;
|
||||||
const denodeify = require('denodeify');
|
const denodeify = require('denodeify');
|
||||||
|
const defaults = require('../../../defaults');
|
||||||
|
|
||||||
const {
|
const {
|
||||||
sep: pathSeparator,
|
sep: pathSeparator,
|
||||||
|
@ -91,6 +92,10 @@ const validateOpts = declareOpts({
|
||||||
type: 'array',
|
type: 'array',
|
||||||
default: ['png'],
|
default: ['png'],
|
||||||
},
|
},
|
||||||
|
platforms: {
|
||||||
|
type: 'array',
|
||||||
|
default: defaults.platforms,
|
||||||
|
},
|
||||||
watch: {
|
watch: {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: false,
|
default: false,
|
||||||
|
@ -126,6 +131,7 @@ type Options = {
|
||||||
getTransformOptions?: GetTransformOptions<*>,
|
getTransformOptions?: GetTransformOptions<*>,
|
||||||
extraNodeModules: {},
|
extraNodeModules: {},
|
||||||
assetExts: Array<string>,
|
assetExts: Array<string>,
|
||||||
|
platforms: Array<string>,
|
||||||
watch: boolean,
|
watch: boolean,
|
||||||
assetServer: AssetServer,
|
assetServer: AssetServer,
|
||||||
transformTimeoutInterval: ?number,
|
transformTimeoutInterval: ?number,
|
||||||
|
@ -200,6 +206,7 @@ class Bundler {
|
||||||
watch: opts.watch,
|
watch: opts.watch,
|
||||||
minifyCode: this._transformer.minify,
|
minifyCode: this._transformer.minify,
|
||||||
moduleFormat: opts.moduleFormat,
|
moduleFormat: opts.moduleFormat,
|
||||||
|
platforms: opts.platforms,
|
||||||
polyfillModuleNames: opts.polyfillModuleNames,
|
polyfillModuleNames: opts.polyfillModuleNames,
|
||||||
projectRoots: opts.projectRoots,
|
projectRoots: opts.projectRoots,
|
||||||
resetCache: opts.resetCache,
|
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() {
|
pit('should get dependencies with polyfills', function() {
|
||||||
var module = createModule('index');
|
var module = createModule('index');
|
||||||
var deps = [module];
|
var deps = [module];
|
||||||
|
|
|
@ -39,6 +39,10 @@ const validateOpts = declareOpts({
|
||||||
type: 'array',
|
type: 'array',
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
platforms: {
|
||||||
|
type: 'array',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
cache: {
|
cache: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -94,7 +98,7 @@ class Resolver {
|
||||||
(opts.blacklistRE && opts.blacklistRE.test(filepath));
|
(opts.blacklistRE && opts.blacklistRE.test(filepath));
|
||||||
},
|
},
|
||||||
providesModuleNodeModules: defaults.providesModuleNodeModules,
|
providesModuleNodeModules: defaults.providesModuleNodeModules,
|
||||||
platforms: defaults.platforms,
|
platforms: opts.platforms,
|
||||||
preferNativePlatform: true,
|
preferNativePlatform: true,
|
||||||
watch: opts.watch,
|
watch: opts.watch,
|
||||||
cache: opts.cache,
|
cache: opts.cache,
|
||||||
|
|
|
@ -83,6 +83,10 @@ const validateOpts = declareOpts({
|
||||||
type: 'array',
|
type: 'array',
|
||||||
default: defaults.assetExts,
|
default: defaults.assetExts,
|
||||||
},
|
},
|
||||||
|
platforms: {
|
||||||
|
type: 'array',
|
||||||
|
default: defaults.platforms,
|
||||||
|
},
|
||||||
transformTimeoutInterval: {
|
transformTimeoutInterval: {
|
||||||
type: 'number',
|
type: 'number',
|
||||||
required: false,
|
required: false,
|
||||||
|
|
Loading…
Reference in New Issue