Angular18升级后GitLab CI/CD中Node命令执行无限挂起问题
Angular 18.1.0 Lint/Prettier 在GitLab CI Docker环境无限挂起的解决思路
1. 切换到官方推荐的Node.js LTS版本
Angular 18官方指定Node.js 20.x LTS为兼容版本,你当前使用的21.4.0、22.0.0均为非LTS版本,大概率存在兼容性问题。直接替换为node:20-alpine或node:20-slim镜像,这是最快速的排查方向。
2. 禁用Prettier缓存
CI环境的文件系统与本地存在差异,Prettier的缓存机制可能导致进程无法正常退出。修改prettier执行命令,添加--no-cache参数:
npm run prettier -- --no-cache
同时检查prettier.config.js配置文件,确保未开启仅本地需要的文件监听类设置。
3. 关闭ESLint并行检查
Angular 18的ESLint默认可能开启并行检查,Docker容器资源受限场景下容易出现进程挂起。可通过两种方式解决:
- 在
.eslintrc.json中添加配置:{ "parallel": false } - 或者在lint命令中显式禁用并行:
npm run lint -- --no-parallel
4. 增加Docker容器资源配额
GitLab Runner默认分配给Docker容器的资源可能不足,导致lint/prettier进程无法正常收尾。在.gitlab-ci.yml中为lint任务添加资源限制:
lint: stage: test image: node:20-alpine resources: limits: memory: 2G cpu: 2 script: - npm ci - npm run lint - npm run prettier
5. 排查进程挂起的具体原因
若上述方法无效,可添加命令定位卡住的进程:
npm run lint && ps aux
也可使用strace跟踪系统调用,查看进程卡在哪个操作环节。同时检查是否有第三方依赖在lint过程中意外启动了常驻进程(如文件监控、未关闭的数据库连接)。
6. 升级Angular CLI到最新补丁版
Angular 18.1.0可能存在CI环境的已知bug,尝试升级到最新的18.x补丁版本:
npm install @angular/cli@latest --save-dev
内容的提问来源于stack exchange,提问作者ForestG
相关产品推荐
相关产品推荐

