Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add flight specific entry point for react package #20304

Merged
merged 1 commit into from Nov 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion fixtures/flight/package.json
Expand Up @@ -67,7 +67,7 @@
"prebuild": "cp -r ../../build/node_modules/* ./node_modules/",
"start": "concurrently \"npm run start:server\" \"npm run start:client\"",
"start:client": "node scripts/start.js",
"start:server": "NODE_ENV=development node --experimental-loader ./loader/index.js server",
"start:server": "NODE_ENV=development node --experimental-loader ./loader/index.js --conditions=react-server server",
"start:prod": "node scripts/build.js && NODE_ENV=production node server",
"build": "node scripts/build.js",
"test": "node scripts/test.js --env=jsdom"
Expand Down
7 changes: 7 additions & 0 deletions packages/react/npm/unstable-index.server.js
@@ -0,0 +1,7 @@
'use strict';

if (process.env.NODE_ENV === 'production') {
module.exports = require('./cjs/react-unstable-index.server.production.min.js');
} else {
module.exports = require('./cjs/react-unstable-index.server.development.js');
}
15 changes: 15 additions & 0 deletions packages/react/package.json
Expand Up @@ -17,9 +17,24 @@
"umd/",
"jsx-runtime.js",
"jsx-dev-runtime.js",
"unstable-index.server.js",
"unstable-cache.js"
],
"main": "index.js",
"exports": {
".": {
"react-server": "./unstable-index.server.js",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't know this feature existed, that's cool

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was thinking the same thing. Just finished reading about it myself.

"default": "./index.js"
},
"./index": {
"react-server": "./unstable-index.server.js",
"default": "./index.js"
},
"./build-info.json": "./build-info.json",
"./jsx-runtime": "./jsx-runtime.js",
"./jsx-dev-runtime": "./jsx-dev-runtime.js",
"./": "./"
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The exports protocol is an allow list so we must list everything we want to expose here. That's actually great because we can explicitly forbid deep linking. Unfortunately our build tooling is using this same file to find things so we need to export everything until we fix that.

},
"repository": {
"type": "git",
"url": "https://github.com/facebook/react.git",
Expand Down
37 changes: 37 additions & 0 deletions packages/react/unstable-index.server.experimental.js
@@ -0,0 +1,37 @@
/**
* 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 {
Children,
createRef,
forwardRef,
lazy,
memo,
useCallback,
useContext,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is createContext not available in server components?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No. There will likely be a new type of context like a "server context" that's serializable or something like that.

useDebugValue,
useMemo,
useMutableSource as unstable_useMutableSource,
createMutableSource as unstable_createMutableSource,
Fragment,
Profiler,
StrictMode,
Suspense,
createElement,
cloneElement,
isValidElement,
version,
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
// exposeConcurrentModeAPIs
useDeferredValue as unstable_useDeferredValue,
SuspenseList as unstable_SuspenseList,
unstable_useOpaqueIdentifier,
// enableDebugTracing
unstable_DebugTracingMode,
} from './src/React';
12 changes: 12 additions & 0 deletions packages/react/unstable-index.server.js
@@ -0,0 +1,12 @@
/**
* 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
*/

throw new Error(
'This entry point is not yet supported outside of experimental channels',
);
9 changes: 9 additions & 0 deletions scripts/rollup/bundles.js
Expand Up @@ -90,6 +90,15 @@ const bundles = [
externals: [],
},

/******* Isomorphic Server Only *******/
{
bundleTypes: [NODE_DEV, NODE_PROD],
moduleType: ISOMORPHIC,
entry: 'react/unstable-index.server',
global: 'React',
externals: [],
},

/******* React JSX Runtime *******/
{
bundleTypes: [
Expand Down
6 changes: 3 additions & 3 deletions scripts/rollup/forks.js
Expand Up @@ -43,7 +43,7 @@ const forks = Object.freeze({
// happens. Other bundles just require('object-assign') anyway.
return null;
}
if (entry === 'react') {
if (entry === 'react' || entry === 'react/unstable-index.server') {
// Use the forked version that uses ES modules instead of CommonJS.
return 'shared/forks/object-assign.inline-umd.js';
}
Expand All @@ -64,8 +64,8 @@ const forks = Object.freeze({
// Without this fork, importing `shared/ReactSharedInternals` inside
// the `react` package itself would not work due to a cyclical dependency.
'shared/ReactSharedInternals': (bundleType, entry, dependencies) => {
if (entry === 'react') {
return 'react/src/ReactSharedInternals';
if (entry === 'react' || entry === 'react/unstable-index.server') {
return 'react/src/ReactSharedInternals.js';
}
if (!entry.startsWith('react/') && dependencies.indexOf('react') === -1) {
// React internals are unavailable if we can't reference the package.
Expand Down