You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Docker Runner中Vite构建失败问题求助

解决GitLab流水线中npm构建找不到Composer依赖文件的问题

问题根源

GitLab CI的同阶段(build)作业默认并行执行。你的composer和npm作业都在build阶段,两个作业会同时启动——当npm run build执行时,composer作业可能还未完成,或者其生成的vendor目录(通过artifacts传递)还没被下载到npm作业的工作目录,导致Vite找不到vendor/tightenco/ziggy/dist/vue.es.js文件。

另外要明确:缓存是为了复用依赖加速构建,而artifacts才是作业间传递文件的正确方式,你已配置composer的artifacts,但并行执行导致文件无法及时到位。

解决方案

1. 让npm作业依赖composer作业

在npm作业中添加needs: [composer],强制npm等待composer作业成功完成并下载其artifacts后再执行。修改后的流水线配置如下:

stages:  
  - build
  - test
  - deploy

composer:
  stage: build
  cache:
    key: ${CI_COMMIT_REF_SLUG}-composer
    paths:
      - vendor/
  
  script:
      - composer install --optimize-autoloader --no-dev --prefer-dist --no-ansi --no-interaction --no-progress --no-scripts      
      - php artisan config:cache      
      - php artisan route:cache
      - php artisan view:cache      
      - php artisan ziggy:generate
  artifacts:
    expire_in: 1 day
    paths:
      - vendor/
      - ${ENV_FILE}

npm:
  stage: build
  needs: [composer] # 等待composer作业完成并获取其artifacts
  cache:
    key: ${CI_COMMIT_REF_SLUG}-npm
    paths:
      - node_modules/
  script:
      - npm install
      - npm run build      
  artifacts:
    expire_in: 2 hours
    paths:
      - node_modules/
      - public/css/
      - public/js/

2. 排查缓存问题(若上述方案无效)

如果怀疑缓存导致旧依赖残留,可尝试:

  • 修改composer缓存的key,比如改成key: ${CI_COMMIT_REF_SLUG}-composer-v2,强制刷新缓存
  • 在composer作业中添加cache: policy: pull-push,确保缓存会被更新而非仅读取
  • 手动清除项目的GitLab缓存:进入项目设置→CI/CD→缓存,点击清除缓存按钮
  • 临时注释掉composer和npm的cache块,测试是否是缓存导致的问题

验证逻辑

添加needs后,GitLab会先执行composer作业,完成后将其artifacts(包括vendor目录)下载到npm作业的工作空间,此时npm run build就能找到ziggy的文件,和你本地测试的执行顺序一致。

内容的提问来源于stack exchange,提问作者gdm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:33:33