mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
This disables symbol renaming in production builds. The original variable and function names are preserved. All other forms of compression applied by Closure (dead code elimination, inlining, etc) are unchanged — the final program is identical to what we were producing before, just in a more readable form. The motivation is to make it easier to debug React issues that only occur in production — the same reason we decided to start shipping sourcemaps in #28827 and #28827. However, because most apps run their own minification step on their npm dependencies, it's not necessary for us to minify the symbols before publishing — it'll be handled the app, if desired. This is the same strategy Meta has used to ship React for years. The React build itself has unminified symbols, but they get minified as part of Meta's regular build pipeline. Even if an app does not minify their npm dependencies, gzip covers most of the cost of symbol renaming anyway. This saves us from having to ship sourcemaps, which means even apps that don't have sourcemaps configured will be able to debug the React build as easily as they would any other npm dependency.
39 lines
1.4 KiB
JavaScript
39 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
function checkDCE() {
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
if (
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'
|
|
) {
|
|
return;
|
|
}
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
// This branch is unreachable because this function is only called
|
|
// in production, but the condition is true only in development.
|
|
// Therefore if the branch is still here, dead code elimination wasn't
|
|
// properly applied.
|
|
// Don't change the message. React DevTools relies on it. Also make sure
|
|
// this message doesn't occur elsewhere in this function, or it will cause
|
|
// a false positive.
|
|
throw new Error('^_^');
|
|
}
|
|
try {
|
|
// Verify that the code above has been dead code eliminated (DCE'd).
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);
|
|
} catch (err) {
|
|
// DevTools shouldn't crash React, no matter what.
|
|
// We should still report in case we break this code.
|
|
console.error(err);
|
|
}
|
|
}
|
|
|
|
if (process.env.NODE_ENV === 'production') {
|
|
// DCE check should happen before ReactDOM bundle executes so that
|
|
// DevTools can report bad minification during injection.
|
|
checkDCE();
|
|
module.exports = require('./cjs/react-dom-unstable_testing.production.js');
|
|
} else {
|
|
module.exports = require('./cjs/react-dom-unstable_testing.development.js');
|
|
}
|