You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换Yarn v1后执行ESLint命令报SyntaxError错误求助

解决ESLint执行时SyntaxError: Unexpected token =错误(来自language-tags包)

问题场景

执行ESLint命令:

$ eslint ./src/ --max-warnings 69 --ext .js,.jsx,.ts,.tsx

触发以下错误:

Oops! Something went wrong! :(

ESLint: 7.7.0

.../node_modules/language-tags/lib/Tag.js:17
        static ERR_DEPRECATED = 1;
                              ^

SyntaxError: Unexpected token =
    at new Script (vm.js:83:7)
    at NativeCompileCache._moduleCompile (.../node_modules/v8-compile-cache/v8-compile-cache.js:240:18)
    at Module._compile (.../node_modules/v8-compile-cache/v8-compile-cache.js:184:36)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (.../node_modules/v8-compile-cache/v8-compile-cache.js:159:20)
    at Object.<anonymous> (.../node_modules/language-tags/lib/index.js:11:11)
error Command failed with exit code 2.

项目使用的ESLint相关依赖版本:

{
    "@typescript-eslint/eslint-plugin": "4.15.2",
    "@typescript-eslint/parser": "4.15.2",
    "eslint": "7.7.0",
    "eslint-config-airbnb": "18.2.1",
    "eslint-config-airbnb-typescript": "9.0.0",
    "eslint-config-prettier": "8.3.0",
    "eslint-import-resolver-typescript": "2.4.0",
    "eslint-plugin-cypress": "2.12.1",
    "eslint-plugin-dirnames": "1.0.3",
    "eslint-plugin-import": "2.23.4",
    "eslint-plugin-jsx-a11y": "6.4.1",
    "eslint-plugin-prettier": "3.4.0",
    "eslint-plugin-react": "7.24.0",
    "eslint-plugin-react-hooks": "4.2.0",
    "eslint-plugin-simple-import-sort": "5.0.3",
    "eslint-plugin-unicorn": "18.0.1"
}

此前使用npm时一切正常,切换到Yarn v1后出现该问题。

问题原因

错误中的static ERR_DEPRECATED = 1是ES6类的公共字段语法,该语法需要Node.js 12.0.0及以上版本支持。触发问题的核心原因有两个:

  • 当前Node.js版本低于12.x,无法解析该语法;
  • Yarn与npm的依赖解析逻辑存在差异,导致安装了更高版本的language-tags包,新版本引入了高版本Node才支持的语法。

解决方案

方案1:升级Node.js版本

  1. 执行node -v检查当前Node版本,若低于12.0.0,升级到LTS版本(如14.x、16.x);
  2. 删除node_modules和yarn.lock,重新执行yarn install;
  3. 再次运行ESLint命令验证。

方案2:锁定language-tags版本(无需升级Node)

通过Yarn的resolutions字段强制指定兼容旧Node版本的language-tags版本:

  1. 在项目根目录的package.json中添加如下字段:
{
  "resolutions": {
    "language-tags": "1.0.5"
  }
}

(注:1.0.5为已知兼容旧Node的版本,也可从之前正常工作的package-lock.json中查找对应版本替换)
2. 删除node_modules和yarn.lock;
3. 执行yarn install重新安装依赖;
4. 运行ESLint命令验证。

方案3:同步npm的依赖树

若需要完全复现npm的依赖环境:

  1. 保留原package-lock.json,执行npm install生成正确的依赖;
  2. 运行yarn import命令,将package-lock.json转换为yarn.lock;
  3. 删除node_modules,执行yarn install即可。

内容的提问来源于stack exchange,提问作者Rinta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:35:21