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

强制指定任意层级依赖glob版本后仍出现多版本问题

问题描述

我克隆了Apache Airflow仓库,在airflow/www/package.json中添加overrides字段,强制指定所有层级的glob版本为10.0.0:

{
  "name": "airflow-www",
  ...
  "resolutions": {
    "d3-color": "^3.1.0"
  },
  "overrides": {
    "glob": "10.0.0"
  },
  ...
}

执行yarn install后,运行npm list --depth 4仍能看到glob的其他版本,yarn.lock中也是如此,我期望项目中仅存在glob@10.0.0。当前环境版本:

$ npm -v
10.5.0
$ yarn -v
4.2.2

解决方法

原因分析

Yarn 4.x 对overrides的处理逻辑和npm存在差异,再加上Airflow可能是工作区(Workspace)结构,单一子包的overrides无法全局生效;另外如果有依赖明确依赖与10.0.0不兼容的glob版本,Yarn会保留兼容版本避免破坏依赖树。

具体步骤

  1. 改用Yarn原生的resolutions字段(更适配)
    Yarn从早期版本就支持resolutions来强制依赖版本,比overrides在Yarn环境下更可靠。修改airflow/www/package.json(如果是工作区项目,建议在根目录package.json配置):

    {
      "name": "airflow-www",
      ...
      "resolutions": {
        "d3-color": "^3.1.0",
        "glob": "10.0.0",
        "**/glob": "10.0.0"
      },
      ...
    }
    

    其中**/glob的写法会匹配所有层级的glob依赖,确保嵌套依赖也强制使用指定版本。

  2. 清理缓存与lock文件,重新安装
    旧缓存和lock文件可能导致依赖未被正确替换,执行以下命令:

    # 清理Yarn缓存
    yarn cache clean
    # 删除子包的lock文件
    rm airflow/www/yarn.lock
    # 重新安装子包依赖
    yarn install --cwd airflow/www
    
  3. 针对工作区项目的额外配置
    如果Airflow是monorepo工作区结构,必须在根目录的package.json中配置resolutions,而非仅在子包中设置:

    {
      "name": "apache-airflow",
      ...
      "workspaces": [
        "airflow/www",
        // 其他工作区路径
      ],
      "resolutions": {
        "glob": "10.0.0",
        "**/glob": "10.0.0"
      },
      ...
    }
    

    之后在根目录执行yarn install,确保所有工作区依赖统一生效。

  4. 验证结果
    用Yarn自带命令检查版本(比npm list更准确):

    # 查看顶级依赖的glob版本
    yarn list glob --depth 0
    # 查看所有层级的glob版本
    yarn list glob
    

    若输出仅包含glob@10.0.0,则配置生效。

特殊情况处理

如果部分依赖明确要求特定版本的glob(比如glob@7.x),强制替换可能引发运行时错误。若必须强制替换所有版本,可以尝试带--force参数重装,但需做好测试:

yarn install --force --cwd airflow/www

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:32:18