TypeScript项目Jenkins构建报TS2571 同配置EC2/本地构建正常
Jenkins构建TypeScript报TS2571错误排查思路
TS2571报错的直接触发逻辑:当编译使用的TypeScript版本≥4.4,且开启了useUnknownInCatchVariables配置(开启strict全严格模式时该选项默认启用),catch块捕获的error参数会被默认标记为unknown类型,直接访问error.name这类属性就会抛出该类型错误。
同镜像测试环境可正常构建、Jenkins环境报错,本质是两个环境的编译依赖或编译配置存在不一致,按以下优先级排查:
- 校验TypeScript实际安装版本
在Jenkins流水线的yarn install步骤后、yarn build步骤前新增执行命令yarn list typescript,同时在测试EC2实例的项目目录下执行同一条命令,对比两者输出的TypeScript版本号。
常见版本不一致原因:- 项目未提交
yarn.lock文件,或Jenkins执行install时携带了--upgrade等升级类参数,拉取到了更高版本的TypeScript - Jenkins工作区未做全量清理,残留了之前构建留下的高版本TypeScript依赖
- 编译时优先调用了全局安装的tsc命令,两个环境全局安装的TypeScript版本不一致
- 项目未提交
- 校验编译时实际加载的TS配置
在yarn build步骤前新增执行命令yarn tsc --showConfig,对比两个环境输出的配置内容,重点检查useUnknownInCatchVariables、strict两个配置项的取值是否一致。
常见配置不一致原因:Jenkins流水线注入了相关环境变量、工作区存在未被Git纳入版本管理的本地tsconfig覆盖文件,导致编译时加载的配置和测试环境不一致。 - 校验依赖安装参数与缓存策略
核对Jenkins流水线yarn install的执行参数和测试环境是否一致,重点确认--frozen-lockfile参数的开启状态:如果测试环境未开启该参数、本地lock文件版本滞后,会出现测试环境安装版本和Jenkins环境安装版本不一致的问题。同时检查Jenkins的yarn缓存配置,排除跨项目依赖缓存污染的可能。 - 快速验证手段
可临时在Jenkins的build命令中追加编译参数--useUnknownInCatchVariables false,即执行yarn build --useUnknownInCatchVariables false,如果构建能正常通过,即可100%确认是该编译配置或TS版本差异导致的问题。
内容的提问来源于stack exchange,提问作者MarPhr2
相关产品推荐
相关产品推荐

