接下来.js不识别'@types/react'



当我尝试用npm run dev运行Next.js应用程序时,我收到一条错误消息,说我没有用Typescript:运行Next所需的程序包

Please install @types/react by running:
npm install --save-dev @types/react
If you are not trying to use TypeScript, please remove the tsconfig.json file from your package root (and any TypeScript files in your pages directory).

但是,已安装模块"@types/react"。我试着运行npm install --save-dev @types/react,但没有收到错误消息(只有一堆警告,但我认为它们不是问题所在(。

如何解决此问题并运行项目?

当前@types/react版本(特别是v18.0.2(中似乎有一个错误,您可以使用npm install --save-dev @types/react@18.0.1降级到18.0.1

来源:https://github.com/vercel/next.js/issues/36085

我使用了yarn add -D @types/react@18.0.1,它运行得很好!Netsu是对的,在当前的@types/react版本(特别是v18.0.2(中似乎有一个错误

我的解决方案是只添加到生产中:

RUN纱线安装-仅=生产

我在这里采用的另一种方法是使用npx create-next-app创建一个新的nextjs项目。然后复制所有依赖项和devDependencies的版本。

这是一个示例package.json。我在创建新的nextjs项目后得到了这个。

{
"name": "my-app",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"next": "12.2.4",
"react": "18.2.0",
"react-dom": "18.2.0"
},
"devDependencies": {
"@types/node": "18.7.1",
"@types/react": "18.0.17",
"@types/react-dom": "18.0.6",
"eslint": "8.21.0",
"eslint-config-next": "12.2.4",
"typescript": "4.7.4"
}
}

复制在创建新的nextjs项目后获得的package.json中列出的所有版本。这将确保您的核心依赖关系彼此兼容。

您需要确保@types/react、react和react dom的版本在package.json 中被锁定并对齐

diff --git a/package.json b/package.json
index 3508c106..cbc412d0 100644
--- a/package.json
+++ b/package.json
@@ -47,9 +47,9 @@
-    "react": "^17.0.2",
+    "react": "17.0.2",
-    "react-dom": "^17.0.2",
+    "react-dom": "17.0.2",
-    "@types/react": "^17.0.0",
+    "@types/react": "17.0.2",

考虑为构建稳定性禁用乐观更新。如果使用CLI,则可能需要使用save exact命令

npm install --save-exact 'react@17.0.2' // etc

请注意,Next 11对@types/react的存在进行了一次稍微不可靠的检查。后一个包只是选择了以不同但有效的方式表达其导出(检查失败(。经过一次有点烦人的手动二进制搜索,我可以说Next 11可以接受的react 17的@types/react的最新版本是17.0.46

同样的检查可能仍然适用于更高版本的Next,这将解释为什么人们报告他们可以使用@types/react 18.0.1,但不能使用18.0.2。

(在撰写本文时,Next 11和React 17的最新版本是next@11.1.4和@类型/react@17.0.46,所以这种情况可能会改变,但在这一点上,两者都可能被视为遗留问题,所以可能不会。我只使用Next 11和React 17作为升级到当前版本的垫脚石(

最新更新