Skip to content

Commit 5ff5700

Browse files
authored
Add explicit invariant when ReactDOM is loaded w/o React (#10449)
1 parent 3bc6432 commit 5ff5700

File tree

5 files changed

+77
-46
lines changed

5 files changed

+77
-46
lines changed

scripts/rollup/results.json

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"bundleSizes": {
33
"react.development.js (UMD_DEV)": {
4-
"size": 65905,
5-
"gzip": 16729
4+
"size": 65990,
5+
"gzip": 16792
66
},
77
"react.production.min.js (UMD_PROD)": {
88
"size": 6359,
@@ -25,40 +25,40 @@
2525
"gzip": 6703
2626
},
2727
"react-dom.development.js (UMD_DEV)": {
28-
"size": 635283,
29-
"gzip": 144613
28+
"size": 635358,
29+
"gzip": 144868
3030
},
3131
"react-dom.production.min.js (UMD_PROD)": {
32-
"size": 108379,
33-
"gzip": 33966
32+
"size": 108806,
33+
"gzip": 34152
3434
},
3535
"react-dom.development.js (NODE_DEV)": {
36-
"size": 594095,
37-
"gzip": 135122
36+
"size": 594767,
37+
"gzip": 135242
3838
},
3939
"react-dom.production.min.js (NODE_PROD)": {
40-
"size": 112397,
41-
"gzip": 35476
40+
"size": 112503,
41+
"gzip": 35538
4242
},
4343
"ReactDOMFiber-dev.js (FB_DEV)": {
44-
"size": 590915,
45-
"gzip": 134583
44+
"size": 591587,
45+
"gzip": 134688
4646
},
4747
"ReactDOMFiber-prod.js (FB_PROD)": {
48-
"size": 424931,
49-
"gzip": 95294
48+
"size": 425507,
49+
"gzip": 95372
5050
},
5151
"react-dom-test-utils.development.js (NODE_DEV)": {
52-
"size": 53359,
53-
"gzip": 13402
52+
"size": 53332,
53+
"gzip": 13396
5454
},
5555
"ReactTestUtils-dev.js (FB_DEV)": {
56-
"size": 53151,
57-
"gzip": 13364
56+
"size": 53124,
57+
"gzip": 13357
5858
},
5959
"react-dom-unstable-native-dependencies.development.js (UMD_DEV)": {
60-
"size": 88196,
61-
"gzip": 22328
60+
"size": 88285,
61+
"gzip": 22345
6262
},
6363
"react-dom-unstable-native-dependencies.production.min.js (UMD_PROD)": {
6464
"size": 15149,
@@ -81,84 +81,84 @@
8181
"gzip": 15736
8282
},
8383
"react-dom-server.browser.development.js (UMD_DEV)": {
84-
"size": 124076,
85-
"gzip": 31288
84+
"size": 123203,
85+
"gzip": 31145
8686
},
8787
"react-dom-server.browser.production.min.js (UMD_PROD)": {
8888
"size": 19874,
8989
"gzip": 7592
9090
},
9191
"react-dom-server.browser.development.js (NODE_DEV)": {
92-
"size": 92358,
93-
"gzip": 23695
92+
"size": 92379,
93+
"gzip": 23736
9494
},
9595
"react-dom-server.browser.production.min.js (NODE_PROD)": {
9696
"size": 18930,
9797
"gzip": 7264
9898
},
9999
"ReactDOMServer-dev.js (FB_DEV)": {
100-
"size": 91551,
101-
"gzip": 23617
100+
"size": 91572,
101+
"gzip": 23660
102102
},
103103
"ReactDOMServer-prod.js (FB_PROD)": {
104104
"size": 49652,
105105
"gzip": 13866
106106
},
107107
"react-dom-server.node.development.js (NODE_DEV)": {
108-
"size": 95135,
109-
"gzip": 24258
108+
"size": 95156,
109+
"gzip": 24301
110110
},
111111
"react-dom-server.node.production.min.js (NODE_PROD)": {
112112
"size": 19986,
113113
"gzip": 7613
114114
},
115115
"react-art.development.js (UMD_DEV)": {
116-
"size": 307891,
117-
"gzip": 66652
116+
"size": 373742,
117+
"gzip": 82778
118118
},
119119
"react-art.production.min.js (UMD_PROD)": {
120-
"size": 47498,
121-
"gzip": 14839
120+
"size": 83498,
121+
"gzip": 25838
122122
},
123123
"react-art.development.js (NODE_DEV)": {
124-
"size": 295222,
125-
"gzip": 62807
124+
"size": 295131,
125+
"gzip": 62776
126126
},
127127
"react-art.production.min.js (NODE_PROD)": {
128128
"size": 52520,
129129
"gzip": 16419
130130
},
131131
"ReactARTFiber-dev.js (FB_DEV)": {
132-
"size": 294163,
133-
"gzip": 62866
132+
"size": 294072,
133+
"gzip": 62835
134134
},
135135
"ReactARTFiber-prod.js (FB_PROD)": {
136136
"size": 220269,
137137
"gzip": 45845
138138
},
139139
"ReactNativeStack-dev.js (RN_DEV)": {
140-
"size": 201067,
141-
"gzip": 37391
140+
"size": 201077,
141+
"gzip": 37401
142142
},
143143
"ReactNativeStack-prod.js (RN_PROD)": {
144144
"size": 136715,
145145
"gzip": 26222
146146
},
147147
"ReactNativeFiber-dev.js (RN_DEV)": {
148-
"size": 305992,
149-
"gzip": 52996
148+
"size": 306002,
149+
"gzip": 52993
150150
},
151151
"ReactNativeFiber-prod.js (RN_PROD)": {
152152
"size": 221418,
153153
"gzip": 38321
154154
},
155155
"react-test-renderer.development.js (NODE_DEV)": {
156-
"size": 299690,
157-
"gzip": 63255
156+
"size": 299567,
157+
"gzip": 63217
158158
},
159159
"ReactTestRendererFiber-dev.js (FB_DEV)": {
160-
"size": 298616,
161-
"gzip": 63330
160+
"size": 298493,
161+
"gzip": 63294
162162
},
163163
"react-test-renderer-shallow.development.js (NODE_DEV)": {
164164
"size": 9556,
@@ -169,8 +169,8 @@
169169
"gzip": 2338
170170
},
171171
"react-noop-renderer.development.js (NODE_DEV)": {
172-
"size": 286933,
173-
"gzip": 60117
172+
"size": 286842,
173+
"gzip": 60085
174174
},
175175
"react-dom-server.development.js (UMD_DEV)": {
176176
"size": 120897,

src/renderers/dom/ReactDOMStackEntry.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
'use strict';
1515

16+
require('checkReact');
1617
var ReactDOMComponentTree = require('ReactDOMComponentTree');
1718
var ReactGenericBatching = require('ReactGenericBatching');
1819
var ReactMount = require('ReactMount');

src/renderers/dom/fiber/ReactDOMFiberEntry.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import type {Fiber} from 'ReactFiber';
1616
import type {ReactNodeList} from 'ReactTypes';
1717

18+
require('checkReact');
1819
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
1920
var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
2021
var ReactControlledComponent = require('ReactControlledComponent');

src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,4 +1136,13 @@ describe('disableNewFiberFeatures', () => {
11361136
ReactDOM.render(<Mocked />, container);
11371137
expect(container.textContent).toEqual('');
11381138
});
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+
});
11391148
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
);

0 commit comments

Comments
 (0)