【问题标题】:When using esbuild with external react I get Dynamic require of "react" is not supported将 esbuild 与外部反应一起使用时,我得到不支持“反应”的动态要求
【发布时间】:2021-07-17 20:11:13
【问题描述】:

我正在尝试将 esbuild 与外部反应一起使用。

这是我的 package.json 文件中的 esbuild 命令

  "scripts": {
    "esbuild": "esbuild ./src/index.js --bundle --outfile=dist/esmain.js --loader:.js=jsx --external:react-dom --external:react "
  }

运行命令时,我没有收到任何错误:

npm run esbuild

> @1.0.0 esbuild C:\prog
> esbuild ./src/index.js --bundle --outfile=dist/esmain.js --loader:.js=jsx --external:react-dom --external:react


  dist\esmain.js  32.7kb

Done in 13ms

问题是当我在浏览器(chrome)中运行程序时,我在控制台中收到此错误

Uncaught Error: Dynamic require of "react" is not supported
    at __require (esmain.js:12)
    at esmain.js:27
    at esmain.js:899

任何想法如何解决这个问题?

【问题讨论】:

  • 你有没有想过解决这个问题?我在导入 babylonjs 时遇到了类似的问题,我试图在我的包中使用 external,所以我可以在脚本标签中使用 babylonjs 的 cdn 版本,但得到类似的错误
  • 你在使用 TypeScript 吗?它可能是将导入转换为需要的一种

标签: esbuild


【解决方案1】:

我从错误中的想法是。您导入的代码中的某处会像这样反应,这实际上是一个 commonjs 约定,主要用于 Nodejs,但浏览器不支持

const react = require('react');

因此,只需在代码编辑器中针对 require('react') 进行代码搜索,然后将其替换为 import 语句。希望对你有用

【讨论】:

  • 它不一定在用户的代码中,它很可能来自为外部加载 CJS 的捆绑程序或类似的东西
【解决方案2】:

你想通过将 react 标记为外部来实现什么?根据我在doc 中读到的内容,我能想到的唯一用例是一个加载了 react 通用 js 的网站,并且您想在脚本中重用此代码。但后来我的问题是 - 为什么在同一页面上有 2 个应用程序,并且在此之上构建不同。

不知道这是否有帮助,但我写了一个 article about building create-react-app generated with esbuild - 构建反应代码似乎很顺利,尤其是与其他一些框架相比。

【讨论】:

  • 我想要更小的 javascript 包,这样我可以更快地下载到用户机器上。反应部分应该已经在那里了。对于我的开发人员来说,较小的包可能看起来不那么复杂
  • 好的,听起来你可以通过拆分来实现:esbuild.github.io/api/#splitting
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2018-03-27
  • 1970-01-01
  • 2023-03-11
  • 2019-07-17
  • 2020-01-24
相关资源
最近更新 更多