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
相关产品推荐
相关产品推荐

