Gatsby部署到Netlify/GitLab报ERESOLVE依赖错误是何原因
问题根因
报错来自npm 7及以上版本默认开启的严格peer依赖校验,和页面代码本身无关:
- 你的项目指定安装的React版本为
18.1.0 - 项目依赖的
@mdx-js/react@1.6.22声明的peer依赖范围仅覆盖React 16.13.1、React 17.x,不支持React 18 - 本地构建正常是因为本地npm版本低于7,或者本地的lock文件跳过了严格校验;Netlify、GitLab CI的构建环境默认预装高版本npm,安装依赖时会强制校验所有peer依赖的匹配关系,冲突时直接终止构建流程,和你部署操作流程、页面代码复杂度没有关系。
修复方案
三选一即可:
- 升级依赖到兼容版本
将MDX相关依赖升级到原生支持React 18的版本,执行:
升级后如果gatsby-config里的mdx插件配置有不兼容的地方,对照版本变更说明调整即可。npm install @mdx-js/react@^2.0.0 gatsby-plugin-mdx@^4.0.0 - 关闭npm严格peer依赖校验
不需要调整依赖版本的话,直接让npm跳过peer依赖校验即可:- 本地安装依赖时执行
npm install --legacy-peer-deps - Netlify部署:在项目根目录新建
.npmrc文件,写入legacy-peer-deps=true后提交到仓库,或者在站点环境变量中添加NPM_FLAGS = "--legacy-peer-deps" - GitLab CI部署:将CI脚本中的
npm install命令修改为npm install --legacy-peer-deps
- 本地安装依赖时执行
- 锁定线上npm版本和本地一致
在package.json中添加engines字段,指定和你本地运行一致的npm大版本,比如本地用npm 6的话配置如下:
Netlify、GitLab CI都会识别该配置,自动安装对应版本的npm,不会触发高版本的严格校验逻辑。"engines": { "npm": "6.x" }
内容的提问来源于stack exchange,提问作者iamaprogrammer
相关产品推荐
相关产品推荐

