不敢相信在 2025,怎么自己 build/bundle + self-host 一个 ESM 版本的 react.js 和 react-dom.js 也是一个找不到官方答案的问题。问了 AI,答案也不靠谱
所有的地方都让人去用
esm.sh/[email protected]
esm.sh/[email protected]/client
这些 CDN 。问题是不用 CDN 的话,自己怎么去把完整的 ESM build 出来呢?问了 AI 也找不到具体的官方步骤
legacy.reactjs.org/docs/how-to-contribute.html
文档里不是有么
但是这是 build UMD 的方式,不是 ESM
那你把 cdn 上的文件存储到本地不就可以了。😅
不行呀。它那个文件只是一个 entry ,后面还要再动态拉取其他的文件的。具体拉多少文件是不知道的(根据你的代码实际调用情况)
🤫,好吧,esm 的 cdn 我还没有用过。都是老老实实的用 npm 。
这个问题已经存在很多年了,不管是源码还是编译脚本没有考虑过 ESM ,要改的话至少需要几个人一起着手,不是 AI 能干的。
github.com/facebook/react/issues/11503
github.com/facebook/react/issues/10021
更关键的一点是,React 几乎所有子模块都是 internal ,没法进行摇树,所以提供 ESM 也没啥意义,你为什么不用 UMD 或者 CJS ?
#4 有这劲拉一个完整的 react.esm.min.js 不行吗,就单独 react 来讲,动态 import 其他文件有什么性能优势吗
整个互联网上没有一个 self-contained, 完整的 react.esm.min.js 。我问过 Grok 了,Grok 确认没有。只有 UMD 版本的。Grok 也同意难以置信
要用在浏览器里,所以不能用 CJS 。用 UMD 的话,会污染 globalThis 呀
那你自己用 rollup 把 cdn 上的 react.cjs 转一下就行了,不需要直接从源码 build esm 。
你可以参考一下我刚刚写的 demo 或者直接用 dist 文件夹下的产物。
github.com/Ray-D-Song/esm-react-transform
github.com/esm-bundle/react 直接看看 esm.sh 怎么做的不就好了
#11 *这俩没关系,修正下措辞:直接照着 esm.sh 的做法改,或者看看其他 esm 重打包怎么做的
问题是为什么要看 ESM 的步骤?不应该是 Meta/React 在 npm 包里提供步骤吗?
怕污染可以 rollup 打包 AMD ,虽然我觉得污染影响不大?
顺便打广告,一个利用 AMD 实现前后端共用代码的框架 地址 github.com/partic2/pxseed-CorePackages
UMD 有官方背书的 CDN ,是完整且 minified 的,不需要 AMD 版本。但是都 2025 年了,不应该默认提供 ESM 的完整 minified 的版本在 dist 目录下吗?难道诸君都不需要?
AMD 也有污染问题。只有 ESM 没有污染
动作这么快?🐮👍
感谢你的代码的提醒,不过我打算从官方背书的 UMD 版本( unpkg.com/[email protected]/umd/react.production.min.js )转。因为一是我用在浏览器环境里,不适合用 cjs ,另外这个 URL 是官方背书的
ESM 不能满足我的需要,我的目标是前后端使用同一套模块加载机制且足够灵活(比如支持通过 indexeddb 加载模块,在加载前预编译代码等),所以 ESM 的灵活性对我来说是不够的,而且 service worker 内不支持 dynamic import ,所以才做了 pxseed ,AMD 只需要 require,define,requirejs 3 个变量也还好
#13 其实我没太搞懂你的真正问题是啥,看上面的回复我以为你是要从现有的 cjs build 文件想办法弄一个 esm build 出来,但现在看来也不是。如果是吐槽 react 官方不作为,CRA 今年年初才终于从文档中移除,react 官方肯定不会在意这点。如果介意全局空间污染,但 2025 年介意空间污染的基本都在用构建工具了,也就不需要再去找 esm 的构建来引入了。
主要是吐槽官方不作为。我只是想找一个像官方 UMD 版本 (react.production.min.js) 一样的 ESM 版本的 production.min.js 文件,但是整个东西方互联网都没有 (esm.sh 上的是 entry 文件,不是打包的)。我又想从 react/react-dom 的 npm 包自己来 build ,还是没有官方步骤
#21 可以试一下 vite 的库模式 cn.vite.dev/guide/build.html#library-mode
但是 ESM 是趋势呀,而且 ESM 的模块空间天生是隔离的,如果你以后需要加载多个 plug-in ,每个 plug-in 自带自己的库(同一个库的不同版本),ESM 的好处就体现了。这样它们互相就不干扰了
举一些不算冷门的例子. JavaScript 系列: Angular Vue React Lit Svelte Solid Qwik PHP 系列: Laravel Pytho…
国产安卓、IOS 、海外安卓,这三类是否有什么区别呢。 主要是想对那些国产 App 的防范,毕竟其它的也很难实现,并非专业人士。 如果是 穷人,海外 版吧。 其实都一样。有…
每个求推荐的帖子都人头攒动,很热闹!而且这类帖子又日经。 所以我很好奇那些发帖人最终都用上 linux 桌面了吗? 后来上了 macOS😂 在用 GNOME 你好,是的 …