升级ESLint至9.12.0后本地正常,GitLab Runner报TypeError
问题排查方案
虽然本地与GitLab Runner的Node.js、Yarn及依赖版本完全一致,但出现@typescript-eslint/no-unused-vars规则的TypeError错误,通常是环境上下文、文件状态或配置加载逻辑的隐性差异导致的,可从以下方向逐一排查:
1. 验证代码与TS配置的一致性
- 确认Runner拉取的
CampaignInfo.tsx文件与本地完全同步:检查是否存在本地未提交的代码修改,或Runner拉取的分支/版本与本地不符。 - 对比本地与Runner的
tsconfig.json配置:重点查看include/exclude是否覆盖该文件,compilerOptions中的strict、target等选项是否一致。类型信息生成不完整时,@typescript-eslint规则无法正确解析AST节点,会触发Cannot read properties of undefined (reading 'type')错误。
2. 排查ESLint缓存影响
本地执行ESLint时默认会生成.eslintcache缓存文件,可能跳过了对CampaignInfo.tsx的完整检查;而GitLab Runner是干净构建环境,无缓存会完整扫描文件。
- 本地删除
.eslintcache后重新执行eslint src,若能复现报错,说明问题出在代码本身,只是本地缓存未触发。
3. 检查ESM配置加载逻辑
你使用的eslint.config.mjs是ESM格式,需确保Runner环境正确处理:
- 确认项目根目录的
package.json包含"type": "module"且已提交至仓库; - 验证Runner的工作目录是否为项目根目录:若工作目录错误,ESLint无法正确加载配置文件或解析相对路径依赖。
4. 确保依赖安装的严格一致性
虽然yarn list显示版本一致,但需避免隐性依赖差异:
- 在Runner中使用
yarn install --frozen-lockfile命令,严格按照yarn.lock安装依赖,防止网络或Yarn版本导致的子依赖差异; - 执行
yarn install --check-files验证依赖文件完整性,排查是否存在缺失或损坏的依赖包。
5. 确认TypeScript类型检查前置步骤
@typescript-eslint规则依赖完整的TypeScript类型信息,若Runner未执行类型检查前置步骤,可能导致解析错误:
- 在Runner的ESLint命令前添加
yarn tsc --noEmit,确保类型信息已生成后再执行eslint src。
内容的提问来源于stack exchange,提问作者Clyde Barrow
相关产品推荐
相关产品推荐

