为何@typescript-eslint/parser版本与package.json指定版本不符?
首先要明确:你安装的@typescript/parser和报错的@typescript-eslint/parser是两个完全不同的包——前者并非主流依赖(甚至npm上无官方包),后者是ESLint解析TypeScript代码的核心依赖,你的问题大概率是包名混淆或间接依赖拉取了高版本导致的。以下是具体检查方向:
核对package.json的包名与依赖
确认你的package.json里是否真的需要@typescript/parser,还是安装时笔误写成了这个包名,而实际项目依赖的是@typescript-eslint/parser。如果是笔误,将package.json中的@typescript/parser替换为@typescript-eslint/parser@^5.62.0,再重新执行yarn install。用yarn命令追踪依赖来源
执行yarn why @typescript-eslint/parser,这个命令会输出所有依赖该包的上层包,以及它们要求的版本范围。通过结果你能清楚看到是哪个依赖(比如eslint-config-next、某个ESLint插件等)拉取了6.10.0版本的包。同时对比那个能在Node14正常运行的项目的依赖树,看相同依赖的版本是否一致。检查yarn.lock的版本锁定情况
git pull后如果yarn.lock被更新,里面记录的实际安装版本会覆盖之前的锁定。对比两个项目的yarn.lock中@typescript-eslint/parser的条目,看你的项目是否没有锁定该包版本,导致每次install都拉取满足依赖范围的最高版本。另外要确认你的项目是否把yarn.lock提交到了git仓库,未提交的话每次pull后重新install都会重新解析依赖。查看resolutions字段的强制约束
那个正常运行的项目可能在package.json中配置了resolutions字段,强制将@typescript-eslint/parser锁定为兼容Node14的5.x版本。检查你的项目是否有同样配置:"resolutions": { "@typescript-eslint/parser": "^5.62.0" }如果没有,添加后执行
yarn install即可强制锁定版本。核对Next.js及相关ESLint依赖版本
Next.js 12默认依赖的@typescript-eslint系列包版本是5.x,但如果你的项目手动安装了更高版本的eslint或@typescript-eslint/eslint-plugin,可能会触发版本升级。对比正常项目的这些包版本,确保你的项目版本完全一致。检查yarn与Node版本的一致性
不同版本的yarn依赖解析逻辑有差异,对比两个项目使用的yarn版本(执行yarn --version),确保版本一致。另外确认项目根目录下是否有.nvmrc等版本配置文件,避免Node版本在安装时被意外切换。
内容的提问来源于stack exchange,提问作者loveloper.dev

