@samitouri / QOS-React / commits / 5ff5700625

Add explicit invariant when ReactDOM is loaded w/o React (#10449)

Brandon Dail committed Aug 13, 2017 at 13:16 UTC 5ff5700625e8a1b340a0d01ff9c88afb07e00bf6
5 files changed +77 -46
scripts/rollup/results.json
+46 -46
@@ -1,8 +1,8 @@
1 {
2 "bundleSizes": {
3 "react.development.js (UMD_DEV)": {
4 - "size": 65905,
5 - "gzip": 16729
4 + "size": 65990,
5 + "gzip": 16792
6 },
7 "react.production.min.js (UMD_PROD)": {
8 "size": 6359,
@@ -25,40 +25,40 @@
25 "gzip": 6703
26 },
27 "react-dom.development.js (UMD_DEV)": {
28 - "size": 635283,
29 - "gzip": 144613
28 + "size": 635358,
29 + "gzip": 144868
30 },
31 "react-dom.production.min.js (UMD_PROD)": {
32 - "size": 108379,
33 - "gzip": 33966
32 + "size": 108806,
33 + "gzip": 34152
34 },
35 "react-dom.development.js (NODE_DEV)": {
36 - "size": 594095,
37 - "gzip": 135122
36 + "size": 594767,
37 + "gzip": 135242
38 },
39 "react-dom.production.min.js (NODE_PROD)": {
40 - "size": 112397,
41 - "gzip": 35476
40 + "size": 112503,
41 + "gzip": 35538
42 },
43 "ReactDOMFiber-dev.js (FB_DEV)": {
44 - "size": 590915,
45 - "gzip": 134583
44 + "size": 591587,
45 + "gzip": 134688
46 },
47 "ReactDOMFiber-prod.js (FB_PROD)": {
48 - "size": 424931,
49 - "gzip": 95294
48 + "size": 425507,
49 + "gzip": 95372
50 },
51 "react-dom-test-utils.development.js (NODE_DEV)": {
52 - "size": 53359,
53 - "gzip": 13402
52 + "size": 53332,
53 + "gzip": 13396
54 },
55 "ReactTestUtils-dev.js (FB_DEV)": {
56 - "size": 53151,
57 - "gzip": 13364
56 + "size": 53124,
57 + "gzip": 13357
58 },
59 "react-dom-unstable-native-dependencies.development.js (UMD_DEV)": {
60 - "size": 88196,
61 - "gzip": 22328
60 + "size": 88285,
61 + "gzip": 22345
62 },
63 "react-dom-unstable-native-dependencies.production.min.js (UMD_PROD)": {
64 "size": 15149,
@@ -81,84 +81,84 @@
81 "gzip": 15736
82 },
83 "react-dom-server.browser.development.js (UMD_DEV)": {
84 - "size": 124076,
85 - "gzip": 31288
84 + "size": 123203,
85 + "gzip": 31145
86 },
87 "react-dom-server.browser.production.min.js (UMD_PROD)": {
88 "size": 19874,
89 "gzip": 7592
90 },
91 "react-dom-server.browser.development.js (NODE_DEV)": {
92 - "size": 92358,
93 - "gzip": 23695
92 + "size": 92379,
93 + "gzip": 23736
94 },
95 "react-dom-server.browser.production.min.js (NODE_PROD)": {
96 "size": 18930,
97 "gzip": 7264
98 },
99 "ReactDOMServer-dev.js (FB_DEV)": {
100 - "size": 91551,
101 - "gzip": 23617
100 + "size": 91572,
101 + "gzip": 23660
102 },
103 "ReactDOMServer-prod.js (FB_PROD)": {
104 "size": 49652,
105 "gzip": 13866
106 },
107 "react-dom-server.node.development.js (NODE_DEV)": {
108 - "size": 95135,
109 - "gzip": 24258
108 + "size": 95156,
109 + "gzip": 24301
110 },
111 "react-dom-server.node.production.min.js (NODE_PROD)": {
112 "size": 19986,
113 "gzip": 7613
114 },
115 "react-art.development.js (UMD_DEV)": {
116 - "size": 307891,
117 - "gzip": 66652
116 + "size": 373742,
117 + "gzip": 82778
118 },
119 "react-art.production.min.js (UMD_PROD)": {
120 - "size": 47498,
121 - "gzip": 14839
120 + "size": 83498,
121 + "gzip": 25838
122 },
123 "react-art.development.js (NODE_DEV)": {
124 - "size": 295222,
125 - "gzip": 62807
124 + "size": 295131,
125 + "gzip": 62776
126 },
127 "react-art.production.min.js (NODE_PROD)": {
128 "size": 52520,
129 "gzip": 16419
130 },
131 "ReactARTFiber-dev.js (FB_DEV)": {
132 - "size": 294163,
133 - "gzip": 62866
132 + "size": 294072,
133 + "gzip": 62835
134 },
135 "ReactARTFiber-prod.js (FB_PROD)": {
136 "size": 220269,
137 "gzip": 45845
138 },
139 "ReactNativeStack-dev.js (RN_DEV)": {
140 - "size": 201067,
141 - "gzip": 37391
140 + "size": 201077,
141 + "gzip": 37401
142 },
143 "ReactNativeStack-prod.js (RN_PROD)": {
144 "size": 136715,
145 "gzip": 26222
146 },
147 "ReactNativeFiber-dev.js (RN_DEV)": {
148 - "size": 305992,
149 - "gzip": 52996
148 + "size": 306002,
149 + "gzip": 52993
150 },
151 "ReactNativeFiber-prod.js (RN_PROD)": {
152 "size": 221418,
153 "gzip": 38321
154 },
155 "react-test-renderer.development.js (NODE_DEV)": {
156 - "size": 299690,
157 - "gzip": 63255
156 + "size": 299567,
157 + "gzip": 63217
158 },
159 "ReactTestRendererFiber-dev.js (FB_DEV)": {
160 - "size": 298616,
161 - "gzip": 63330
160 + "size": 298493,
161 + "gzip": 63294
162 },
163 "react-test-renderer-shallow.development.js (NODE_DEV)": {
164 "size": 9556,
@@ -169,8 +169,8 @@
169 "gzip": 2338
170 },
171 "react-noop-renderer.development.js (NODE_DEV)": {
172 - "size": 286933,
173 - "gzip": 60117
172 + "size": 286842,
173 + "gzip": 60085
174 },
175 "react-dom-server.development.js (UMD_DEV)": {
176 "size": 120897,
src/renderers/dom/ReactDOMStackEntry.js
+1
@@ -13,6 +13,7 @@
13
14 'use strict';
15
16 +require('checkReact');
17 var ReactDOMComponentTree = require('ReactDOMComponentTree');
18 var ReactGenericBatching = require('ReactGenericBatching');
19 var ReactMount = require('ReactMount');
src/renderers/dom/fiber/ReactDOMFiberEntry.js
+1
@@ -15,6 +15,7 @@
15 import type {Fiber} from 'ReactFiber';
16 import type {ReactNodeList} from 'ReactTypes';
17
18 +require('checkReact');
19 var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
20 var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
21 var ReactControlledComponent = require('ReactControlledComponent');
src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js
+9
@@ -1136,4 +1136,13 @@ describe('disableNewFiberFeatures', () => {
1136 ReactDOM.render(<Mocked />, container);
1137 expect(container.textContent).toEqual('');
1138 });
1139 +
1140 + it('throws if the React package cannot be loaded', () => {
1141 + jest.resetModules();
1142 + jest.mock('react', () => undefined);
1143 + expect(() => require('react-dom')).toThrow(
1144 + 'ReactDOM was loaded before React.',
1145 + );
1146 + jest.resetModules();
1147 + });
1148 });
src/renderers/dom/shared/checkReact.js new
+20
@@ -0,0 +1,20 @@
1 +/**
2 + * Copyright 2013-present, Facebook, Inc.
3 + * All rights reserved.
4 + *
5 + * This source code is licensed under the BSD-style license found in the
6 + * LICENSE file in the root directory of this source tree. An additional grant
7 + * of patent rights can be found in the PATENTS file in the same directory.
8 + *
9 + * @providesModule checkReact
10 + * @flow
11 + */
12 +
13 +var React = require('react');
14 +var invariant = require('fbjs/lib/invariant');
15 +
16 +invariant(
17 + React,
18 + 'ReactDOM was loaded before React. Make sure you load ' +
19 + 'the React package before loading ReactDOM.',
20 +);