facebook / react

The library for web and native user interfaces.
https://react.dev
MIT License
225.37k stars 45.96k forks source link

Bug: there is no renderToReadableStream function in react-dom@18.2.0 in Node.js #26906

Open krutoo opened 1 year ago

krutoo commented 1 year ago

I try to use renderToReadableStream function from react-dom/server in Node.js but there is no such function in package.

React version: 18.2.0 Node.js version 16.15.0 or 18.16.0

Steps To Reproduce

  1. create index.mjs file
  2. insert code:

    import { renderToString, renderToReadableStream } from "react-dom/server";
    
    console.log({ renderToString, renderToReadableStream });
  3. run node index.mjs in terminal

Link to code example:

StackBlitz

The current behavior

Error in terminal:

file:///Users/user/Projects/node-fetch-api-server/index.mjs:1
import { renderToString, renderToReadableStream } from "react-dom/server";
                         ^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Named export 'renderToReadableStream' not found. The requested module 'react-dom/server' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:

import pkg from 'react-dom/server';
const { renderToString, renderToReadableStream } = pkg;

    at ModuleJob._instantiate (node:internal/modules/esm/module_job:124:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:190:5)

Node.js v18.16.0

The expected behavior

Node.js suupports web streams in experimental mode.

The package react-dom/server must have a function renderToReadableStream according to the documentation: https://react.dev/reference/react-dom/server/renderToReadableStream

MeenuyD commented 1 year ago

Hello I think this is not the bug in React-dom I have checked both the official documentation repository there are mentions about the reanderToReadableStream there you wrote an incorrect code here is the updated code.

import ReactDOMServer from 'react-dom/server;

const { renderToString, renderToReadableStream } = ReactDOMServer;

console.log({ renderToString, renderToReadableStream });

because the error says that it is the syntax error Named export 'renderToReadableStream' not found. The requested module 'react-dom/server' is a CommonJS module, which may not support all module.exports as named exports.

krutoo commented 1 year ago

@MeenuyD I tried your snippet and it doesn't work either

thynson commented 1 year ago

Node.js exposes WebStream to global since 18.+, but react-dom/server does not export renderToReadableStream without checking if it present.

krutoo commented 1 year ago

Is it possible to add renderToReadableStream to Node.js package?

marbemac commented 9 months ago

Ditto - often when building and testing things locally the runtime is node, while the final deploy target is edge (cloudflare, etc). Because renderToReadableStream is not exposed on the node build, we have to do a dance to make everything work.

Any particular reason to not include renderToReadableStream on the node build? Made sense when node did not have support for web streams, but it has for a while now, and now that everybody seems to be converging on the web streams standard perhaps it makes more sense to include?

github-actions[bot] commented 3 months ago

This issue has been automatically marked as stale. If this issue is still affecting you, please leave any comment (for example, "bump"), and we'll keep it open. We are sorry that we haven't been able to prioritize it yet. If you have any new additional information, please include it with your comment!

marbemac commented 3 months ago

bump

ondrej-langr commented 3 months ago

Bump, there is no export from the ./server.node.js file. Is there a reason for it?

github-actions[bot] commented 5 days ago

This issue has been automatically marked as stale. If this issue is still affecting you, please leave any comment (for example, "bump"), and we'll keep it open. We are sorry that we haven't been able to prioritize it yet. If you have any new additional information, please include it with your comment!

marbemac commented 1 day ago

bump

anjunar commented 20 hours ago

bump