Shopware 6构建失败 eslint依赖冲突ERESOLVE报错问题求助
问题原因
这个报错是npm 7及以上版本的默认依赖解析规则变更导致的:
- npm 7+版本会将peer依赖冲突从警告升级为硬错误,直接中断安装流程
- Shopware 6.4.x 自带的
@shopware-ag/eslint-config-base@1.0.0依赖eslint-config-airbnb-base@13.2.0,后者仅支持eslint 4.x/5.x版本 - 项目内同时引入的
@typescript-eslint/eslint-plugin@5.1.0要求eslint版本为6.x/7.x/8.x,两者版本要求互斥
你没有修改核心代码、重装实例仍复现、多套实例同时触发问题,都是因为环境中使用的npm 8.11.0默认开启了严格peer依赖校验,和Shopware核心代码本身是否改动无关。
解决方案(按推荐优先级排序)
- 方案1:开启legacy peer依赖解析(最稳妥,生产环境推荐)
执行构建前临时修改npm配置,让npm使用6.x版本的依赖解析逻辑,和Shopware 6.4发布时的官方构建行为保持一致,不会修改任何依赖版本,也不会影响构建产物:
构建完成后如果需要恢复npm默认配置,执行# 进入Shopware项目根目录后执行 npm config set legacy-peer-deps true ./bin/build.shnpm config set legacy-peer-deps false即可。 - 方案2:通过overrides固定传递依赖版本(无需修改npm全局配置)
npm 8+支持在项目根目录的package.json中添加overrides字段,强制升级冲突的依赖包到兼容版本:
修改完成后删除项目内的{ "overrides": { "eslint-config-airbnb-base": "^15.0.0" } }node_modules目录和package-lock.json文件,重新执行build.sh即可。该方案仅会升级eslint规则包版本,不会影响管理后台和店面的前端打包结果,可能出现少量额外的eslint格式提示,可忽略。 - 方案3:降级npm到6.x版本(完全匹配官方原始构建环境)
如果不想修改配置,可以将当前Node.js 16环境下的npm降级到6.x版本,从根本上规避严格peer依赖校验:
如果你使用nvm等Node版本管理工具,可以单独给Shopware 6.4项目切换npm版本,避免影响其他项目。npm install -g npm@6 ./bin/build.sh
避坑提示
- 不要使用
npm install --force参数强制安装,该参数会跳过所有依赖校验,可能导致安装的依赖存在隐性兼容问题,触发构建或运行时的未知JS错误。 - 不需要重新下载安装Shopware核心包,也不需要修改核心目录下的任何配置文件,该问题和核心代码无关。
内容的提问来源于stack exchange,提问作者Yutani
相关产品推荐
相关产品推荐

