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 [];
|
||||
},
|
||||
|
||||
/**
|
||||
* 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,
|
||||
|
|
Loading…
Reference in New Issue