我不打算使用WebPack捆绑的js文件,而是以ES6的方式原生地import React ES6模块。
下面是用JSX或TSX编写的典型代码,或者仅仅是ES6。
import * as React from 'react';
import * as ReactDOM from 'react-dom';所以,我调查了./node_modules/react和react-dom。
有两个名为cjs和umd的目录,每个目录都包含react.development.js和react.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';如何获取React和ReactDOM的ES6模块??
有没有什么方法可以使用Babel的eco甚至TypeScript中的工具来生成ES6模块?
谢谢。
发布于 2019-03-05 21:10:43
2021-04-11更新:
https://github.com/facebook/react/issues/11503#issuecomment-662647468是丹·阿布拉莫夫从2020-07-22发布的更新,其中提到了新的https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html。有了新的转换,导入React的默认导出的理由就少了很多。
实际的第一方React ESM可能会在React 17 drops之后发生。
除了清理未使用的导入外,这还将帮助您为React的未来主要版本(而不是React 17)做准备,该版本将支持ES模块,并且没有默认导出。
旧版应答
2017年11月9日Dan Abramov said
目前我们只发布所有包的CommonJS版本。然而,我们可能希望在将来将它们作为ESM发货(#10021)。
我们不能很容易地做到这一点,因为我们还没有真正决定每个包的顶级ES导出是什么样子的。例如,React是否有一堆已命名的导出,但也有一个名为react的默认导出?我们是否应该鼓励人们导入*,以便更好地摇动树木?当前导出一个类的react-test-renderer/shallow怎么办(因此会在Node中开始失败,它是否被转换为缺省导出)?
The issue referenced above是您从2017年6月21日起提出的请求。
发布于 2019-11-21 12:04:26
在我们等待正式的React ESM时,这里有一个相当简单但很老套的解决方案。使用React和ReactDOM的npm包附带的umd模块。用以下方式包装umd模块:
反应
let g = {}
let w = (function(){
// Standard umd module code goes here
}).bind(g)
w()
export default g.ReactReactDOM
import React from './react'
let g = {React: React}
let w = (function(){
// Standard umd module code goes here
}).bind(g)
w()
export default g.ReactDOM您可能需要修改./react导入路径,以满足服务器的要求。
https://stackoverflow.com/questions/51765686
复制相似问题