Skip to content

Commit 8cbc16f

Browse files
authored
Unify the way we fork modules (#11711)
* Unify the way we fork modules * Replace rollup-plugin-alias with our own plugin This does exactly what we need and doesn't suffer from rollup/rollup-plugin-alias#34. * Move the new plugin to its own file * Rename variable for consistency I settled on calling them "forks" since we already have a different concept of "shims". * Move fork config into its own file
1 parent 3c977de commit 8cbc16f

File tree

16 files changed

+174
-112
lines changed

16 files changed

+174
-112
lines changed

.flowconfig

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
<PROJECT_ROOT>/scripts/rollup/shims/facebook-www/.*
99
<PROJECT_ROOT>/scripts/rollup/shims/react-native/.*
1010

11-
# Note: intentionally *don't* ignore /scripts/rollup/shims/rollup/
12-
# because it is part of the build and isn't external.
13-
1411
<PROJECT_ROOT>/.*/node_modules/y18n/.*
1512
<PROJECT_ROOT>/node_modules/chrome-devtools-frontend/.*
1613
<PROJECT_ROOT>/node_modules/devtools-timeline-model/.*

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@
8080
"prop-types": "^15.6.0",
8181
"rimraf": "^2.6.1",
8282
"rollup": "^0.51.7",
83-
"rollup-plugin-alias": "^1.2.1",
8483
"rollup-plugin-babel": "^2.7.1",
8584
"rollup-plugin-closure-compiler-js": "^1.0.4",
8685
"rollup-plugin-commonjs": "^8.2.6",

packages/react-cs-renderer/src/__tests__/ReactNativeCS-test.internal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var React;
1313
var ReactNativeCS;
1414

1515
jest.mock('shared/ReactFeatureFlags', () =>
16-
require('../ReactNativeCSFeatureFlags'),
16+
require('shared/forks/ReactFeatureFlags.native-cs'),
1717
);
1818

1919
describe('ReactNativeCS', () => {

packages/react-cs-renderer/src/ReactNativeCSFeatureFlags.js renamed to packages/shared/forks/ReactFeatureFlags.native-cs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'fbjs/lib/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as CSFeatureFlagsType from './ReactNativeCSFeatureFlags';
13+
import typeof * as CSFeatureFlagsType from './ReactFeatureFlags.native-cs';
1414

1515
export const debugRenderPhaseSideEffects = false;
1616
export const enableAsyncSubtreeAPI = true;

packages/react-native-renderer/src/ReactNativeFeatureFlags.js renamed to packages/shared/forks/ReactFeatureFlags.native.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invariant from 'fbjs/lib/invariant';
1111

1212
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
13-
import typeof * as FeatureFlagsShimType from './ReactNativeFeatureFlags';
13+
import typeof * as FeatureFlagsShimType from './ReactFeatureFlags.native';
1414

1515
// Re-export dynamic flags from the fbsource version.
1616
export const {debugRenderPhaseSideEffects} = require('ReactFeatureFlags');

scripts/rollup/shims/rollup/ReactFeatureFlags-www.js renamed to packages/shared/forks/ReactFeatureFlags.www.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99

1010
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
11-
import typeof * as FeatureFlagsShimType from './ReactFeatureFlags-www';
11+
import typeof * as FeatureFlagsShimType from './ReactFeatureFlags.www';
1212

1313
// Re-export dynamic flags from the www version.
1414
export const {

scripts/rollup/build.js

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@ const rollup = require('rollup').rollup;
44
const babel = require('rollup-plugin-babel');
55
const closure = require('rollup-plugin-closure-compiler-js');
66
const commonjs = require('rollup-plugin-commonjs');
7-
const alias = require('rollup-plugin-alias');
87
const prettier = require('rollup-plugin-prettier');
98
const replace = require('rollup-plugin-replace');
109
const stripBanner = require('rollup-plugin-strip-banner');
1110
const chalk = require('chalk');
12-
const join = require('path').join;
13-
const resolve = require('path').resolve;
14-
const resolvePlugin = require('rollup-plugin-node-resolve');
11+
const path = require('path');
12+
const resolve = require('rollup-plugin-node-resolve');
1513
const fs = require('fs');
1614
const rimraf = require('rimraf');
1715
const argv = require('minimist')(process.argv.slice(2));
1816
const Modules = require('./modules');
1917
const Bundles = require('./bundles');
2018
const sizes = require('./plugins/sizes-plugin');
19+
const useForks = require('./plugins/use-forks-plugin');
2120
const Stats = require('./stats');
2221
const extractErrorCodes = require('../error-codes/extract-errors');
2322
const syncReactDom = require('./sync').syncReactDom;
@@ -88,7 +87,7 @@ function getBabelConfig(updateBabelOptions, bundleType, filename) {
8887
return Object.assign({}, options, {
8988
plugins: options.plugins.concat([
9089
// Use object-assign polyfill in open source
91-
resolve('./scripts/babel/transform-object-assign-require'),
90+
path.resolve('./scripts/babel/transform-object-assign-require'),
9291
// Minify invariant messages
9392
require('../error-codes/replace-invariant-error-codes'),
9493
// Wrap warning() calls in a __DEV__ check so they are stripped from production.
@@ -113,11 +112,11 @@ function handleRollupWarnings(warning) {
113112
);
114113
}
115114
const importSideEffects = Modules.getImportSideEffects();
116-
const path = match[1];
117-
if (typeof importSideEffects[path] !== 'boolean') {
115+
const externalModule = match[1];
116+
if (typeof importSideEffects[externalModule] !== 'boolean') {
118117
throw new Error(
119118
'An external module "' +
120-
path +
119+
externalModule +
121120
'" is used in a DEV-only code path ' +
122121
'but we do not know if it is safe to omit an unused require() to it in production. ' +
123122
'Please add it to the `importSideEffects` list in `scripts/rollup/modules.js`.'
@@ -218,11 +217,10 @@ function getPlugins(
218217
bundleType,
219218
globalName,
220219
moduleType,
221-
modulesToStub,
222-
featureFlags
220+
modulesToStub
223221
) {
224222
const findAndRecordErrorCodes = extractErrorCodes(errorCodeOpts);
225-
const shims = Modules.getShims(bundleType, entry, featureFlags);
223+
const forks = Modules.getForks(bundleType, entry);
226224
const isProduction = isProductionBundleType(bundleType);
227225
const isInGlobalScope = bundleType === UMD_DEV || bundleType === UMD_PROD;
228226
const isFBBundle = bundleType === FB_DEV || bundleType === FB_PROD;
@@ -236,10 +234,10 @@ function getPlugins(
236234
return source;
237235
},
238236
},
239-
// Shim some modules for www custom behavior and optimizations.
240-
alias(shims),
237+
// Shim any modules that need forking in this environment.
238+
useForks(forks),
241239
// Use Node resolution mechanism.
242-
resolvePlugin({
240+
resolve({
243241
skip: externals,
244242
}),
245243
// Remove license headers from individual modules
@@ -384,8 +382,7 @@ async function createBundle(bundle, bundleType) {
384382
bundleType,
385383
bundle.global,
386384
bundle.moduleType,
387-
bundle.modulesToStub,
388-
bundle.featureFlags
385+
bundle.modulesToStub
389386
),
390387
// We can't use getters in www.
391388
legacy: bundleType === FB_DEV || bundleType === FB_PROD,
@@ -439,9 +436,9 @@ rimraf('build', async () => {
439436
// create a new build directory
440437
fs.mkdirSync('build');
441438
// create the packages folder for NODE+UMD bundles
442-
fs.mkdirSync(join('build', 'packages'));
439+
fs.mkdirSync(path.join('build', 'packages'));
443440
// create the dist folder for UMD bundles
444-
fs.mkdirSync(join('build', 'dist'));
441+
fs.mkdirSync(path.join('build', 'dist'));
445442

446443
await Packaging.createFacebookWWWBuild();
447444
await Packaging.createReactNativeBuild();
@@ -462,11 +459,11 @@ rimraf('build', async () => {
462459
}
463460

464461
if (syncFbsource) {
465-
await syncReactNative(join('build', 'react-native'), syncFbsource);
466-
await syncReactNativeRT(join('build', 'react-rt'), syncFbsource);
467-
await syncReactNativeCS(join('build', 'react-cs'), syncFbsource);
462+
await syncReactNative(path.join('build', 'react-native'), syncFbsource);
463+
await syncReactNativeRT(path.join('build', 'react-rt'), syncFbsource);
464+
await syncReactNativeCS(path.join('build', 'react-cs'), syncFbsource);
468465
} else if (syncWww) {
469-
await syncReactDom(join('build', 'facebook-www'), syncWww);
466+
await syncReactDom(path.join('build', 'facebook-www'), syncWww);
470467
}
471468

472469
console.log(Stats.printResults());

0 commit comments

Comments
 (0)