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

GitLab生产环境CI执行npm run build报cross-env not found但staging正常如何解决

问题原因
  • 你在CI变量中全局设置了NODE_ENV=production,此时执行npm install会自动跳过安装package.json里的devDependencies依赖,cross-env通常作为开发依赖被放在devDependencies分类中
  • 你虽然单独执行了npm install cross-env,但本地安装的npm包可执行文件默认存放在当前项目的node_modules/.bin目录下,shell默认不会扫描该路径,因此执行npm run build调用cross-env时会找不到执行文件
  • staging环境未报错的核心原因大概率是staging的CI配置没有设置全局的NODE_ENV=production,npm install时完整安装了所有依赖,或是staging的缓存中保留了devDependencies的安装文件
解决方案

按优先级推荐以下几种修复方式:

方案1:调整NODE_ENV的设置位置(最推荐)

将全局的NODE_ENV变量移到build命令内部声明,不要全局设置,这样npm install会正常安装所有依赖,修改你的.gitlab-ci.yml配置:

build-prod:
  stage: build-prod
  image: node:latest
  # 移除此处全局的NODE_ENV: production配置
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: on_success
    - when: never
  script:
    - node --version
    - npm --version
    - ls
    - cd front
    - ls
    - npm install -g @vue/cli-service@latest
    - rm -rf node_modules
    - npm install
    # 不需要单独安装cross-env,只要package.json的devDependencies中已包含cross-env即可
    - npm run build
    - ls

你原来的package.json中build命令已经是cross-env NODE_ENV=production && vue-cli-service build,无需额外修改。

方案2:强制npm安装所有依赖

如果必须保留全局NODE_ENV=production的配置,给npm install加上--include=dev参数强制安装开发依赖:

script:
  # 其他步骤保持不变
  - npm install --include=dev
  - npm run build

方案3:全局安装cross-env

直接把cross-env安装到全局环境,shell就能直接识别到执行文件:

script:
  # 其他步骤保持不变
  - npm install -g cross-env
  - npm run build

方案4:调用时指定cross-env路径

如果不想修改安装逻辑,也可以调整package.json里的build命令,直接指定cross-env的相对路径:

{
  "scripts": {
    "build": "./node_modules/.bin/cross-env NODE_ENV=production && vue-cli-service build"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:06:08