diff --git a/scripts/rollup/build.js b/scripts/rollup/build.js index 6847a16d4a..a6ebd4f244 100644 --- a/scripts/rollup/build.js +++ b/scripts/rollup/build.js @@ -76,36 +76,43 @@ function getHeaderSanityCheck(bundleType, hasteName) { function getBanner(bundleType, hasteName, filename) { switch (bundleType) { + // UMDs are not wrapped in conditions. + case UMD_DEV: + case UMD_PROD: + return Header.getUMDHeader(filename, reactVersion); + // CommonJS DEV bundle is guarded to help weak dead code elimination. + case NODE_DEV: + return `'use strict';\n\n\nif (process.env.NODE_ENV !== "production") {\n`; + case NODE_PROD: + return ''; + // FB and RN DEV bundles are also guarded. + // Additionally, all FB and RN bundles need Haste headers. case FB_DEV: case FB_PROD: case RN_DEV: case RN_PROD: - let hasteFinalName = hasteName; - switch (bundleType) { - case FB_DEV: - case RN_DEV: - hasteFinalName += '-dev'; - break; - case FB_PROD: - case RN_PROD: - hasteFinalName += '-prod'; - break; - } - const fbDevCode = `\n\n'use strict';\n\n` + `\nif (__DEV__) {\n`; - return Header.getProvidesHeader(hasteFinalName, bundleType, fbDevCode); - case UMD_DEV: - case UMD_PROD: - return Header.getUMDHeader(filename, reactVersion); + const isDev = bundleType === FB_DEV || bundleType === RN_DEV; + const hasteFinalName = hasteName + (isDev ? '-dev' : '-prod'); + return ( + Header.getProvidesHeader(hasteFinalName) + + (isDev ? `\n\n'use strict';\n\n\nif (__DEV__) {\n` : '') + ); default: - return ''; + throw new Error('Unknown type.'); } } function getFooter(bundleType) { - if (bundleType === FB_DEV) { - return '\n}\n'; + // Only need a footer if getBanner() has an opening brace. + switch (bundleType) { + // Non-UMD DEV bundles need conditions to help weak dead code elimination. + case NODE_DEV: + case FB_DEV: + case RN_DEV: + return '\n}\n'; + default: + return ''; } - return ''; } function updateBabelConfig(babelOpts, bundleType) { diff --git a/scripts/rollup/header.js b/scripts/rollup/header.js index 40ea03d640..f58b3373f0 100644 --- a/scripts/rollup/header.js +++ b/scripts/rollup/header.js @@ -1,8 +1,6 @@ -const Bundles = require('./bundles'); +'use strict'; -const FB_DEV = Bundles.bundleTypes.FB_DEV; - -function getProvidesHeader(hasteFinalName, bundleType, fbDevCode) { +function getProvidesHeader(hasteFinalName) { return `/** * Copyright 2013-present, Facebook, Inc. * All rights reserved. @@ -13,7 +11,7 @@ function getProvidesHeader(hasteFinalName, bundleType, fbDevCode) { * * @noflow * @providesModule ${hasteFinalName} - */${bundleType === FB_DEV ? fbDevCode : ''} + */ `; } diff --git a/scripts/rollup/results.json b/scripts/rollup/results.json index 8fcf1f13b1..9b66796145 100644 --- a/scripts/rollup/results.json +++ b/scripts/rollup/results.json @@ -1,27 +1,27 @@ { "bundleSizes": { "react.development.js (UMD_DEV)": { - "size": 71599, - "gzip": 18503 + "size": 71605, + "gzip": 18506 }, "react.production.min.js (UMD_PROD)": { "size": 7585, "gzip": 2999 }, "react.development.js (NODE_DEV)": { - "size": 61813, - "gzip": 16088 + "size": 61884, + "gzip": 16131 }, "react.production.min.js (NODE_PROD)": { "size": 6483, "gzip": 2581 }, "React-dev.js (FB_DEV)": { - "size": 61047, - "gzip": 15811 + "size": 61056, + "gzip": 15809 }, "React-prod.js (FB_PROD)": { - "size": 29022, + "size": 29031, "gzip": 7690 }, "react-dom.development.js (UMD_DEV)": {