npm ci --include=dev未安装devDependencies致rollup找不到报错
问题根因
sh: 1: rollup: not found报错不是devDependencies配置错误导致的,核心原因是GitLab CI的job运行机制限制:
GitLab CI的每个job都运行在独立隔离的容器实例中,不同job的文件系统默认完全不共享。当前配置将依赖安装拆分为.pre阶段的独立npm_install job,该job中执行npm ci安装的node_modules仅存在于自身的临时容器内,后续build阶段的compile_app job运行在全新的容器环境中,无法读取之前安装的依赖,自然找不到本地安装的rollup命令。
此外现有缓存配置仅缓存了npm下载缓存目录.npm/,未将node_modules纳入缓存范围,也无法通过缓存将已安装的依赖传递给后续job。
修复方案
- 首选方案(稳定性最佳):不要把依赖安装拆分为独立job,直接在需要依赖的job内执行安装步骤。修改
compile_appjob配置如下:
后续其他需要依赖npm包的job,也按相同逻辑在脚本开头执行依赖安装即可。compile_app: stage: build script: - npm ci --include=dev --cache .npm --prefer-offline - npm run build - 可选方案(不推荐,易出现兼容问题):如果必须拆分独立的安装job,可以将
node_modules加入缓存路径,让后续job从缓存读取已安装的依赖,需修改cache配置段:
注意这种方案存在兼容风险,如果CI基础镜像的Node版本、系统架构发生变化,缓存的二进制依赖可能直接运行失败。cache: key: files: - package-lock.json paths: - .npm/ - node_modules/ - 配置优化建议:当前使用
node:latest作为基础镜像,版本滚动更新可能触发不可预期的构建故障,建议替换为和本地开发环境一致的固定大版本镜像,例如node:18、node:20。
内容的提问来源于stack exchange,提问作者studio-pj
相关产品推荐
相关产品推荐

