Wrap all non-UMD DEV bundles into a condition (#9969)
* Wrap all non-UMD DEV bundles into a condition * Update header.js * Create header.js
Dan Abramov committed
Jun 15, 2017 at 00:53 UTC
310a6c4fc1b9d05331639c742efc1d7e334f968c
3 files changed
+37
-32
scripts/rollup/build.js
+27
-20
@@ -76,36 +76,43 @@ function getHeaderSanityCheck(bundleType, hasteName) {
76
77
function getBanner(bundleType, hasteName, filename) {
78
switch (bundleType) {
79
+ // UMDs are not wrapped in conditions.
80
+ case UMD_DEV:
81
+ case UMD_PROD:
82
+ return Header.getUMDHeader(filename, reactVersion);
83
+ // CommonJS DEV bundle is guarded to help weak dead code elimination.
84
+ case NODE_DEV:
85
+ return `'use strict';\n\n\nif (process.env.NODE_ENV !== "production") {\n`;
86
+ case NODE_PROD:
87
+ return '';
88
+ // FB and RN DEV bundles are also guarded.
89
+ // Additionally, all FB and RN bundles need Haste headers.
90
case FB_DEV:
91
case FB_PROD:
92
case RN_DEV:
93
case RN_PROD:
83
- let hasteFinalName = hasteName;
84
- switch (bundleType) {
85
- case FB_DEV:
86
- case RN_DEV:
87
- hasteFinalName += '-dev';
88
- break;
89
- case FB_PROD:
90
- case RN_PROD:
91
- hasteFinalName += '-prod';
92
- break;
93
- }
94
- const fbDevCode = `\n\n'use strict';\n\n` + `\nif (__DEV__) {\n`;
95
- return Header.getProvidesHeader(hasteFinalName, bundleType, fbDevCode);
96
- case UMD_DEV:
97
- case UMD_PROD:
98
- return Header.getUMDHeader(filename, reactVersion);
94
+ const isDev = bundleType === FB_DEV || bundleType === RN_DEV;
95
+ const hasteFinalName = hasteName + (isDev ? '-dev' : '-prod');
96
+ return (
97
+ Header.getProvidesHeader(hasteFinalName) +
98
+ (isDev ? `\n\n'use strict';\n\n\nif (__DEV__) {\n` : '')
99
+ );
100
default:
100
- return '';
101
+ throw new Error('Unknown type.');
102
}
103
}
104
105
function getFooter(bundleType) {
105
- if (bundleType === FB_DEV) {
106
- return '\n}\n';
106
+ // Only need a footer if getBanner() has an opening brace.
107
+ switch (bundleType) {
108
+ // Non-UMD DEV bundles need conditions to help weak dead code elimination.
109
+ case NODE_DEV:
110
+ case FB_DEV:
111
+ case RN_DEV:
112
+ return '\n}\n';
113
+ default:
114
+ return '';
115
}
108
- return '';
116
}
117
118
function updateBabelConfig(babelOpts, bundleType) {
scripts/rollup/header.js
+3
-5
@@ -1,8 +1,6 @@
1
-const Bundles = require('./bundles');
1
+'use strict';
2
3
-const FB_DEV = Bundles.bundleTypes.FB_DEV;
4
-
5
-function getProvidesHeader(hasteFinalName, bundleType, fbDevCode) {
3
+function getProvidesHeader(hasteFinalName) {
4
return `/**
5
* Copyright 2013-present, Facebook, Inc.
6
* All rights reserved.
@@ -13,7 +11,7 @@ function getProvidesHeader(hasteFinalName, bundleType, fbDevCode) {
11
*
12
* @noflow
13
* @providesModule ${hasteFinalName}
16
- */${bundleType === FB_DEV ? fbDevCode : ''}
14
+ */
15
`;
16
}
17
scripts/rollup/results.json
+7
-7
@@ -1,27 +1,27 @@
1
{
2
"bundleSizes": {
3
"react.development.js (UMD_DEV)": {
4
- "size": 71599,
5
- "gzip": 18503
4
+ "size": 71605,
5
+ "gzip": 18506
6
},
7
"react.production.min.js (UMD_PROD)": {
8
"size": 7585,
9
"gzip": 2999
10
},
11
"react.development.js (NODE_DEV)": {
12
- "size": 61813,
13
- "gzip": 16088
12
+ "size": 61884,
13
+ "gzip": 16131
14
},
15
"react.production.min.js (NODE_PROD)": {
16
"size": 6483,
17
"gzip": 2581
18
},
19
"React-dev.js (FB_DEV)": {
20
- "size": 61047,
21
- "gzip": 15811
20
+ "size": 61056,
21
+ "gzip": 15809
22
},
23
"React-prod.js (FB_PROD)": {
24
- "size": 29022,
24
+ "size": 29031,
25
"gzip": 7690
26
},
27
"react-dom.development.js (UMD_DEV)": {