如何获得React和ReactDOM的ES6模块?

7 node.js typescript ecmascript-6 reactjs webpack

我不打算使用WebPack捆绑的js文件,而是以importES6方式本机使用React ES6模块。

这是JSX,TSX或ES6中的典型代码。

import * as React from 'react';
import * as ReactDOM from 'react-dom';
Run Code Online (Sandbox Code Playgroud)

因此,我进行了调查./node_modules/reactreact-dom

有两个名为cjs和的目录umd,每个目录都包含react.development.jsreact.production.min.js

足够公平,因此要调查文件,

cjs用于CommonJS module.exports/ require模块。

umd是通用模块定义,看起来可以通过Babel插件使用transform-es2015-modules-umd

在这两个文件中,它们都不是ES6模块,对我来说,无法找到以下模块文件是非常尴尬的情况:

import * as React from 'react';
import * as ReactDOM from 'react-dom';
Run Code Online (Sandbox Code Playgroud)

如何获得React和ReactDOM的ES6模块?

是否有使用Babel eco或TypeScript中的工具生成ES6模块的方法?

谢谢。

weg*_*gry 7

2021-04-11 更新:

https://github.com/facebook/react/issues/11503#issuecomment-662647468是 Dan Abramov 于 2020 年 7 月 22 日的更新,其中提到了新的https://reactjs.org/blog/2020/09/22 /introducing-the-new-jsx-transform.html。有了新的转换,导入 React 的默认导出的理由就少了很多。

真正的第一方 React ESM 分发可能发生在 React 17 发布之后。

除了清理未使用的导入之外,这还将帮助您为未来的 React 主要版本(不是 React 17)做好准备,该版本将支持 ES 模块并且没有默认导出。

较旧的答案

2017 年 11 月 9 日,丹·阿布拉莫夫说

目前我们只提供所有包的 CommonJS 版本。但是,我们可能希望将来将它们作为 ESM 发布 (#10021)。

我们不能很容易地做到这一点,因为我们还没有真正决定每个包的顶级 ES 导出是什么样的。例如,react 是否有一堆命名导出,还有一个名为 React 的默认导出?我们是否应该鼓励人们导入 * 以获得更好的摇树效果?当前导出类的 react-test-renderer/shallow 怎么样(如果它转换为默认导出,那么在 Node 中会开始失败)?

上面提到的问题是对您自 2017 年 6 月 21 日起提出的要求的请求。