Fork ReactSharedInternals for UMD builds (#15617)

This commit is contained in:
Andrew Clark
2019-05-10 13:51:39 -07:00
committed by GitHub
parent 39ef609e7c
commit edfedf3ae9
5 changed files with 60 additions and 17 deletions
@@ -6,8 +6,6 @@
*/
import assign from 'object-assign';
import * as Scheduler from 'scheduler';
import * as SchedulerTracing from 'scheduler/tracing';
import ReactCurrentDispatcher from './ReactCurrentDispatcher';
import ReactCurrentOwner from './ReactCurrentOwner';
import ReactDebugCurrentFrame from './ReactDebugCurrentFrame';
@@ -21,18 +19,6 @@ const ReactSharedInternals = {
assign,
};
if (__UMD__) {
// Re-export the schedule API(s) for UMD bundles.
// This avoids introducing a dependency on a new UMD global in a minor update,
// Since that would be a breaking change (e.g. for all existing CodeSandboxes).
// This re-export is only required for UMD bundles;
// CJS bundles use the shared NPM package.
Object.assign(ReactSharedInternals, {
Scheduler,
SchedulerTracing,
});
}
if (__DEV__) {
Object.assign(ReactSharedInternals, {
// These should not be included in production.
@@ -0,0 +1,44 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import assign from 'object-assign';
import * as Scheduler from 'scheduler';
import * as SchedulerTracing from 'scheduler/tracing';
import ReactCurrentDispatcher from '../ReactCurrentDispatcher';
import ReactCurrentOwner from '../ReactCurrentOwner';
import ReactDebugCurrentFrame from '../ReactDebugCurrentFrame';
const ReactSharedInternals = {
ReactCurrentDispatcher,
ReactCurrentOwner,
// used by act()
ReactShouldWarnActingUpdates: {current: false},
// Used by renderers to avoid bundling object-assign twice in UMD bundles:
assign,
};
if (__DEV__) {
Object.assign(ReactSharedInternals, {
// These should not be included in production.
ReactDebugCurrentFrame,
// Shim for React DOM 16.0.0 which still destructured (but not used) this.
// TODO: remove in React 17.0.
ReactComponentTreeHook: {},
});
}
// Re-export the schedule API(s) for UMD bundles.
// This avoids introducing a dependency on a new UMD global in a minor update,
// Since that would be a breaking change (e.g. for all existing CodeSandboxes).
// This re-export is only required for UMD bundles;
// CJS bundles use the shared NPM package.
Object.assign(ReactSharedInternals, {
Scheduler,
SchedulerTracing,
});
export default ReactSharedInternals;
@@ -55,7 +55,8 @@ describe('Scheduling UMD bundle', () => {
const umdAPIDev = require('../../npm/umd/scheduler.development');
const umdAPIProd = require('../../npm/umd/scheduler.production.min');
const umdAPIProfiling = require('../../npm/umd/scheduler.profiling.min');
const secretAPI = require('react/src/ReactSharedInternals').default;
const secretAPI = require('react/src/forks/ReactSharedInternals.umd')
.default;
validateForwardedAPIs(api, [
umdAPIDev,
umdAPIProd,
@@ -69,7 +70,8 @@ describe('Scheduling UMD bundle', () => {
const umdAPIDev = require('../../npm/umd/scheduler-tracing.development');
const umdAPIProd = require('../../npm/umd/scheduler-tracing.production.min');
const umdAPIProfiling = require('../../npm/umd/scheduler-tracing.profiling.min');
const secretAPI = require('react/src/ReactSharedInternals').default;
const secretAPI = require('react/src/forks/ReactSharedInternals.umd')
.default;
validateForwardedAPIs(api, [
umdAPIDev,
umdAPIProd,
@@ -35,7 +35,7 @@ describe('ReactDOMFrameScheduling', () => {
};
spyOnDevAndProd(console, 'error');
require('react-dom');
expect(console.error.calls.count()).toEqual(2);
expect(console.error.calls.count()).toEqual(1);
expect(console.error.calls.argsFor(0)[0]).toMatch(
"This browser doesn't support requestAnimationFrame.",
);
+11
View File
@@ -230,6 +230,17 @@ const forks = Object.freeze({
}
},
'react/src/ReactSharedInternals.js': (bundleType, entry) => {
switch (bundleType) {
case UMD_DEV:
case UMD_PROD:
case UMD_PROFILING:
return 'react/src/forks/ReactSharedInternals.umd.js';
default:
return null;
}
},
// Different wrapping/reporting for caught errors.
'shared/invokeGuardedCallbackImpl': (bundleType, entry) => {
switch (bundleType) {