当我尝试用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作为升级到当前版本的垫脚石(