如果在React V17中遇到“Cannot find module react\jsx-runtime Do you mean to import react\jsx-runtime.js?”的错误,请尝试以下方法

請問問題。

在NextJs项目中安装包含自制的React组件的npm库并进行next build时,出现了以下错误:Cannot find module ‘project\node_modules\react\jsx-runtime’ imported from project\node_modules\my-library\my-component。您的意思是要导入react/jsx-runtime.js吗?

在Stack Overflow等地也有人提到,对于库和项目之间的版本差异,我以为可以简单地解决,但结果却陷入了一个深深的泥沼中。

首先,我們嘗試了以下方法。
將React升級到最新的18版本的做法並不會對項目產生影響,我們將其排除在外。

@types/reactを最新Verにあげる
ライブラリ側も、Nextjsプロジェクト側も全てVersionを揃えてみましたが、改善しませんでした。プロジェクト側で問題なく@types/reactによるModue resolutionは行えていたので望み薄だったので気にしません。

node_modulesと.lockファイルを削除し、install
lockファイルを削除するという荒業ですが、やるしかありません。package.jsonの各ライブラリVersionを色々と調整しつつ、やっとの思いで試してみましたが、改善しません。

明白这不是一个简单的问题,我意识到了这一点,并做好了各种准备,同时也会自然地产生一些后悔,比如”我根本不应该搞编写库之类的”。我只能从错误信息中寻找线索。

环境。

以下的内容并非完全复制,仅列举了相关的软件包。
值得一提的是,react:17.0.2将使用此处提到的jsx-runtime进行JSX解析。

npmライブラリ
react:17.0.2
typescript:4.4.4

NextJs Project(上記Packageをインストールする)
react:17.0.2
typescript:4.4.4

导致这种情况的因素是什么?

错误发生的原因在于npm库的实际文件,也就是打包后的JavaScript,从这一点可以确定这不是@types相关的问题。

换句话说,实际上应该直接导入react/jsx-runtime这个名称。

在这里,创建npm库时的智慧会派上用场。

在类似于父母/子女的形式下,要实现模块导入,需要在React库的package.json文件中进行以下说明。您需要明确设置路径。

{
    "name":"react",
    ,
    ,
    "exports": {
        "./jsx-runtime":{
            "import": "xxxx",
            "require": "xxx"
        }
    }
}

當查看項目的node_modules/react的package.json時,我們發現沒有exports的內容!

当以这个问题为基础进行搜索时,发现了一个涉及相同问题的议题。

我放下了心中的负担。

应对措施

根据最近的修订,从React的v18版本开始,看起来有一种简单的解决方法,就是将npm库和NextJs项目都升级到最新版本。然而由于各种考虑因素,这并不可行。

因此,我已经对npm库的捆绑进行了如下更改,以便不包含jsx-runtime。这样,React就会变得需要用于JSX解释,所以我还在Component文件中导入了React。

{
  "compilerOptions": {
    ,
    "jsx": "react",

最后

当查看Next.js项目的tsconfig.json文件时,发现”jsx”选项被设置为”preserve”,因此可以确定这一块被正确考虑到了。

补充

还有一种方法是在NextJs项目中解决react/jsx-runtime和react/jsx-runtime.js的关联,但由于不希望对主体项目进行设置相关的修改,我们选择不采用该方法,而是通过引入npm库来解决。

广告
将在 10 秒后关闭
bannerAds