切换Yarn v1后执行ESLint命令报SyntaxError错误求助
问题场景
执行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版本
- 执行
node -v检查当前Node版本,若低于12.0.0,升级到LTS版本(如14.x、16.x); - 删除
node_modules和yarn.lock,重新执行yarn install; - 再次运行ESLint命令验证。
方案2:锁定language-tags版本(无需升级Node)
通过Yarn的resolutions字段强制指定兼容旧Node版本的language-tags版本:
- 在项目根目录的
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的依赖环境:
- 保留原
package-lock.json,执行npm install生成正确的依赖; - 运行
yarn import命令,将package-lock.json转换为yarn.lock; - 删除
node_modules,执行yarn install即可。
内容的提问来源于stack exchange,提问作者Rinta
相关产品推荐
相关产品推荐

