GitLab CI执行npm run lint时加载@next/next插件失败问题排查
解决Windows正常但GitLab Runner(Ubuntu)执行
npm run lint加载@next/next插件失败的问题 问题描述
本地Windows环境执行npm run lint无异常,但在Ubuntu系统的GitLab Runner中运行该命令时,出现加载@next/next插件失败的错误,报错信息:
Failed to load plugin '@next/next' declared in '.eslintrc.json » eslint-config-next/core-web-vitals » /home/gitlab-runner/builds/iPXPkofu/0/isi/micat/front_end/node_modules/eslint-config-next/index.js': Unexpected token '.' Referenced from: /home/gitlab-runner/builds/iPXPkofu/0/isi/micat/front_end/node_modules/eslint-config-next/index.js
当前.eslintrc.json内容:
{ "extends": "next/core-web-vitals" }
尝试将extends改为"next"后,问题仍存在。项目package.json内容如下:
{ "name": "micat", "version": "0.1.0", "private": true, "scripts": { "dev": "next dev", "build": "next build && next export", "start": "next start", "lint": "next lint" }, "dependencies": { "bootstrap": "5.1.3", "crossfilter2": "1.5.4", "d3": "7.5.0", "dc": "4.2.7", "exceljs": "^4.3.0", "next": "12.2.0", "react": "18.2.0", "react-dom": "18.2.0" }, "devDependencies": { "eslint": "8.18.0", "eslint-config-next": "12.2.2", "eslint-plugin-jest": "24.4.0", "eslint-plugin-jsx-a11y": "6.6.0", "eslint-plugin-node": "11.1.0", "eslint-plugin-react-hooks": "4.6.0", "jest": "28.1.2", "jest-cli": "27.2.0", "jest-jasmine2": "27.2.0" } }
问题原因及解决方案
这不是Next.js的Bug,核心原因是Node.js版本不兼容,其次是依赖版本不一致。Unexpected token '.'通常表示代码使用了低版本Node.js不支持的语法(比如可选链?.),而GitLab Runner环境的Node.js版本低于要求。
1. 统一Node.js版本
- 先在本地Windows执行
node -v查看当前使用的Node.js版本 - 在GitLab CI配置文件(
.gitlab-ci.yml)中指定相同版本,示例:before_script: - nvm install 16.x # 替换为你本地的Node.js版本 - nvm use 16.x - npm install
2. 对齐Next.js与eslint-config-next版本
你的package.json中next版本为12.2.0,eslint-config-next为12.2.2,版本不一致可能引发兼容问题。将两者改为相同版本,比如都用12.2.0:
"dependencies": { "next": "12.2.0" }, "devDependencies": { "eslint-config-next": "12.2.0" }
修改后执行npm install更新依赖。
3. 清理缓存重新安装依赖
在GitLab Runner执行流程中添加清理步骤,避免旧依赖缓存干扰:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

