Fork ReactSharedInternals for UMD builds (#15617)
Andrew Clark committed
May 10, 2019 at 13:51 UTC
edfedf3ae9453c646afe5e77c75bd2a53159e262
5 files changed
+60
-17
packages/react/src/ReactSharedInternals.js
-14
@@ -6,8 +6,6 @@
6
*/
7
8
import assign from 'object-assign';
9
-import * as Scheduler from 'scheduler';
10
-import * as SchedulerTracing from 'scheduler/tracing';
9
import ReactCurrentDispatcher from './ReactCurrentDispatcher';
10
import ReactCurrentOwner from './ReactCurrentOwner';
11
import ReactDebugCurrentFrame from './ReactDebugCurrentFrame';
@@ -21,18 +19,6 @@ const ReactSharedInternals = {
19
assign,
20
};
21
24
-if (__UMD__) {
25
- // Re-export the schedule API(s) for UMD bundles.
26
- // This avoids introducing a dependency on a new UMD global in a minor update,
27
- // Since that would be a breaking change (e.g. for all existing CodeSandboxes).
28
- // This re-export is only required for UMD bundles;
29
- // CJS bundles use the shared NPM package.
30
- Object.assign(ReactSharedInternals, {
31
- Scheduler,
32
- SchedulerTracing,
33
- });
34
-}
35
-
22
if (__DEV__) {
23
Object.assign(ReactSharedInternals, {
24
// These should not be included in production.
packages/react/src/forks/ReactSharedInternals.umd.js
new
+44
@@ -0,0 +1,44 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+import assign from 'object-assign';
9
+import * as Scheduler from 'scheduler';
10
+import * as SchedulerTracing from 'scheduler/tracing';
11
+import ReactCurrentDispatcher from '../ReactCurrentDispatcher';
12
+import ReactCurrentOwner from '../ReactCurrentOwner';
13
+import ReactDebugCurrentFrame from '../ReactDebugCurrentFrame';
14
+
15
+const ReactSharedInternals = {
16
+ ReactCurrentDispatcher,
17
+ ReactCurrentOwner,
18
+ // used by act()
19
+ ReactShouldWarnActingUpdates: {current: false},
20
+ // Used by renderers to avoid bundling object-assign twice in UMD bundles:
21
+ assign,
22
+};
23
+
24
+if (__DEV__) {
25
+ Object.assign(ReactSharedInternals, {
26
+ // These should not be included in production.
27
+ ReactDebugCurrentFrame,
28
+ // Shim for React DOM 16.0.0 which still destructured (but not used) this.
29
+ // TODO: remove in React 17.0.
30
+ ReactComponentTreeHook: {},
31
+ });
32
+}
33
+
34
+// Re-export the schedule API(s) for UMD bundles.
35
+// This avoids introducing a dependency on a new UMD global in a minor update,
36
+// Since that would be a breaking change (e.g. for all existing CodeSandboxes).
37
+// This re-export is only required for UMD bundles;
38
+// CJS bundles use the shared NPM package.
39
+Object.assign(ReactSharedInternals, {
40
+ Scheduler,
41
+ SchedulerTracing,
42
+});
43
+
44
+export default ReactSharedInternals;
packages/scheduler/src/__tests__/SchedulerUMDBundle-test.internal.js
+4
-2
@@ -55,7 +55,8 @@ describe('Scheduling UMD bundle', () => {
55
const umdAPIDev = require('../../npm/umd/scheduler.development');
56
const umdAPIProd = require('../../npm/umd/scheduler.production.min');
57
const umdAPIProfiling = require('../../npm/umd/scheduler.profiling.min');
58
- const secretAPI = require('react/src/ReactSharedInternals').default;
58
+ const secretAPI = require('react/src/forks/ReactSharedInternals.umd')
59
+ .default;
60
validateForwardedAPIs(api, [
61
umdAPIDev,
62
umdAPIProd,
@@ -69,7 +70,8 @@ describe('Scheduling UMD bundle', () => {
70
const umdAPIDev = require('../../npm/umd/scheduler-tracing.development');
71
const umdAPIProd = require('../../npm/umd/scheduler-tracing.production.min');
72
const umdAPIProfiling = require('../../npm/umd/scheduler-tracing.profiling.min');
72
- const secretAPI = require('react/src/ReactSharedInternals').default;
73
+ const secretAPI = require('react/src/forks/ReactSharedInternals.umd')
74
+ .default;
75
validateForwardedAPIs(api, [
76
umdAPIDev,
77
umdAPIProd,
packages/shared/__tests__/ReactDOMFrameScheduling-test.js
+1
-1
@@ -35,7 +35,7 @@ describe('ReactDOMFrameScheduling', () => {
35
};
36
spyOnDevAndProd(console, 'error');
37
require('react-dom');
38
- expect(console.error.calls.count()).toEqual(2);
38
+ expect(console.error.calls.count()).toEqual(1);
39
expect(console.error.calls.argsFor(0)[0]).toMatch(
40
"This browser doesn't support requestAnimationFrame.",
41
);
scripts/rollup/forks.js
+11
@@ -230,6 +230,17 @@ const forks = Object.freeze({
230
}
231
},
232
233
+ 'react/src/ReactSharedInternals.js': (bundleType, entry) => {
234
+ switch (bundleType) {
235
+ case UMD_DEV:
236
+ case UMD_PROD:
237
+ case UMD_PROFILING:
238
+ return 'react/src/forks/ReactSharedInternals.umd.js';
239
+ default:
240
+ return null;
241
+ }
242
+ },
243
+
244
// Different wrapping/reporting for caught errors.
245
'shared/invokeGuardedCallbackImpl': (bundleType, entry) => {
246
switch (bundleType) {