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

使用lerna run时Vue指定模式构建被忽略的问题排查

问题原因及解决方法

核心原因:工作目录不匹配

通过Lerna从根目录执行lerna run build-test --scope @company/web-app时,部分Lerna版本或配置会让脚本的执行工作目录停留在项目根目录,而非子包@company/web-app的目录。

Vue CLI加载.env系列文件是基于当前工作目录(process.cwd())查找的:它会优先读取当前目录下的.env.test,找不到则 fallback 到默认.env。如果Lerna在根目录执行脚本,Vue CLI会去根目录找.env.test(大概率不存在),最终加载根目录的.env,而非子包目录下的.env.test。

另外还有两种可能的诱因:

  • 项目根目录本身存在.env文件,Vue CLI会向上读取父目录的环境文件,覆盖子包的配置优先级
  • Lerna执行脚本时传递了额外环境变量,干扰了Vue CLI的mode识别

解决方法

  1. 强制在子包目录执行脚本
    用lerna exec替代lerna run,该命令默认会进入目标子包目录执行后续命令:

    lerna exec --scope @company/web-app -- npm run build-test --include-dependencies
    
  2. 明确指定环境文件路径
    修改子包package.json的build-test脚本,通过--env-file参数直接指定.env.test的路径:

    "build-test": "vue-cli-service build --mode test --env-file ./env.test"
    

    这样无论工作目录在哪,Vue CLI都会加载子包目录下的目标环境文件。

  3. 调整Lerna配置
    在根目录lerna.json中添加配置,强制npm在子包目录执行脚本:

    {
      "npmClientArgs": ["--prefix", "./packages/web-app"]
    }
    

    注意将./packages/web-app替换为你的子包实际路径。

  4. 清理根目录环境文件
    如果根目录存在.env文件,可直接删除;若需要保留,可在子包的.env.test中添加更高优先级的配置(Vue CLI中.env.[mode]优先级高于上级目录的.env)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:05:28