-
Notifications
You must be signed in to change notification settings - Fork 46.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Export React as Named Exports instead of CommonJS (#18106)
* Add options for forked entry points We currently fork .fb.js entry points. This adds a few more options. .modern.fb.js - experimental FB builds .classic.fb.js - stable FB builds .fb.js - if no other FB build, use this for FB builds .experimental.js - experimental builds .stable.js - stable builds .js - used if no other override exists This will be used to have different ES exports for different builds. * Switch React to named exports * Export named exports from the export point itself We need to re-export the Flow exported types so we can use them in our code. We don't want to use the Flow types from upstream since it doesn't have the non-public APIs that we have. This should be able to use export * but I don't know why it doesn't work. This actually enables Flow typing of React which was just "any" before. This exposed some Flow errors that needs fixing. * Create forks for the react entrypoint None of our builds expose all exports and they all differ in at least one way, so we need four forks. * Set esModule flag to false We don't want to emit the esModule compatibility flag on our CommonJS output. For now we treat our named exports as if they're CommonJS. This is a potentially breaking change for scheduler (but all those apis are unstable), react-is and use-subscription. However, it seems unlikely that anyone would rely on this since these only have named exports. * Remove unused Feature Flags * Let jest observe the stable fork for stable tests This lets it do the negative test by ensuring that the right tests fail. However, this in turn will make other tests that are not behind __EXPERIMENTAL__ fail. So I need to do that next. * Put all tests that depend on exports behind __EXPERIMENTAL__ Since there's no way to override the exports using feature flags in .intern.js anymore we can't use these APIs in stable. The tradeoff here is that we can either enable the negative tests on "stable" that means experimental are expected to fail, or we can disable tests on stable. This is unfortunate since some of these APIs now run on a "stable" config at FB instead of the experimental. * Switch ReactDOM to named exports Same strategy as React. I moved the ReactDOMFB runtime injection to classic.fb.js Since we only fork the entrypoint, the `/testing` entrypoint needs to be forked too to re-export the same things plus `act`. This is a bit unfortunate. If it becomes a pattern we can consider forking in the module resolution deeply. fix flow * Fix ReactDOM Flow Types Now that ReactDOM is Flow type checked we need to fix up its types. * Configure jest to use stable entry for ReactDOM in non-experimental * Remove additional FeatureFlags that are no longer needed These are only flagging the exports and no implementation details so we can control them fully through the export overrides.
- Loading branch information
1 parent
8d7535e
commit 60016c4
Showing
62 changed files
with
1,073 additions
and
670 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/** | ||
* Copyright (c) Facebook, Inc. and its affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @flow | ||
*/ | ||
|
||
import {addUserTimingListener} from 'shared/ReactFeatureFlags'; | ||
import {isEnabled} from './src/events/ReactDOMEventListener'; | ||
import {getClosestInstanceFromNode} from './src/client/ReactDOMComponentTree'; | ||
|
||
import {__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED} from './src/client/ReactDOM'; | ||
|
||
// For classic WWW builds, include a few internals that are already in use. | ||
Object.assign((__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: any), { | ||
ReactBrowserEventEmitter: { | ||
isEnabled, | ||
}, | ||
ReactDOMComponentTree: { | ||
getClosestInstanceFromNode, | ||
}, | ||
// Perf experiment | ||
addUserTimingListener, | ||
}); | ||
|
||
export { | ||
createPortal, | ||
unstable_batchedUpdates, | ||
flushSync, | ||
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, | ||
version, | ||
findDOMNode, | ||
hydrate, | ||
render, | ||
unmountComponentAtNode, | ||
createRoot, | ||
createBlockingRoot, | ||
unstable_discreteUpdates, | ||
unstable_flushDiscreteUpdates, | ||
unstable_flushControlled, | ||
unstable_scheduleHydration, | ||
unstable_renderSubtreeIntoContainer, | ||
unstable_createPortal, | ||
} from './src/client/ReactDOM'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
/** | ||
* Copyright (c) Facebook, Inc. and its affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @flow | ||
*/ | ||
|
||
export { | ||
createPortal, | ||
unstable_batchedUpdates, | ||
flushSync, | ||
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, | ||
version, | ||
// Disabled behind disableLegacyReactDOMAPIs | ||
findDOMNode, | ||
hydrate, | ||
render, | ||
unmountComponentAtNode, | ||
// exposeConcurrentModeAPIs | ||
createRoot, | ||
createBlockingRoot, | ||
unstable_discreteUpdates, | ||
unstable_flushDiscreteUpdates, | ||
unstable_flushControlled, | ||
unstable_scheduleHydration, | ||
// Disabled behind disableUnstableRenderSubtreeIntoContainer | ||
unstable_renderSubtreeIntoContainer, | ||
// Disabled behind disableUnstableCreatePortal | ||
// Temporary alias since we already shipped React 16 RC with it. | ||
// TODO: remove in React 17. | ||
unstable_createPortal, | ||
} from './src/client/ReactDOM'; |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
/** | ||
* Copyright (c) Facebook, Inc. and its affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @flow | ||
*/ | ||
|
||
export { | ||
createPortal, | ||
unstable_batchedUpdates, | ||
flushSync, | ||
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, | ||
version, | ||
createRoot, | ||
createBlockingRoot, | ||
unstable_discreteUpdates, | ||
unstable_flushDiscreteUpdates, | ||
unstable_flushControlled, | ||
unstable_scheduleHydration, | ||
} from './src/client/ReactDOM'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
/** | ||
* Copyright (c) Facebook, Inc. and its affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @flow | ||
*/ | ||
|
||
export { | ||
createPortal, | ||
unstable_batchedUpdates, | ||
flushSync, | ||
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, | ||
version, | ||
findDOMNode, | ||
hydrate, | ||
render, | ||
unmountComponentAtNode, | ||
unstable_renderSubtreeIntoContainer, | ||
// Temporary alias since we already shipped React 16 RC with it. | ||
// TODO: remove in React 17. | ||
unstable_createPortal, | ||
} from './src/client/ReactDOM'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.