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

Azure DevOps构建因废弃inflight包失败,本地正常的原因及解决办法

问题描述

我的项目package.json中的devDependencies配置如下:

"devDependencies": {
    "@nx/js": "18.0.4",
    "@nx/jest": "18.0.4",
    "@nx/eslint-plugin": "18.0.4",
    "typescript": "5.3.3",
    "eslint": "8.56.0",
    "jest": "^29.7.0",
    "@types/jest": "^29.5.12",
    "ts-jest": "29.1.2",
    "nx": "latest"
  }

本地执行npm install时无任何错误或警告,但在Azure DevOps流水线的构建环境中执行相同命令时,出现如下废弃依赖警告:

npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.

已知该警告和Jest的间接依赖有关,且存在已久,但另一个使用相同Jest版本的仓库在构建时却没有这个问题。

原因分析
  1. npm版本差异:本地和Azure DevOps环境的npm版本不一致,不同版本的npm在解析间接依赖时会选择不同的版本路径。比如本地npm可能自动避开了包含inflight@1.0.6的依赖链,而流水线中的npm版本仍会拉取这个废弃包。
  2. lock文件未同步:本地已经生成package-lock.json/npm-shrinkwrap.json锁定了依赖版本,避免拉取inflight;但流水线如果没提交lock文件,或者lock文件与流水线环境不兼容,就会重新解析依赖,导致出现废弃包。
  3. 依赖树差异:两个仓库虽然Jest版本相同,但其他依赖(比如NX相关包)的版本或依赖链存在差异,导致其中一个仓库的依赖路径引入了inflight,另一个则没有。
修复/排查步骤
  • 统一npm版本:在Azure DevOps流水线中先安装和本地一致的npm版本,比如执行npm install -g npm@<你的本地npm版本>,再运行npm install。
  • 提交lock文件:将本地生成的package-lock.json提交到仓库,让流水线直接使用锁定的依赖版本,避免重新解析依赖树。
  • 排查依赖链:在本地执行npm ls inflight,找出哪个间接依赖引入了inflight@1.0.6;再去另一个无问题的仓库执行同样命令,对比差异,定位是哪个顶层依赖导致的区别。
  • 升级或替换依赖:如果是某个NX包或其他依赖引入了废弃包,尝试升级该依赖到最新兼容版本,或者寻找替代方案。
  • 临时屏蔽警告:若该警告不影响构建结果,可在流水线的npm install命令后添加--no-warnings参数暂时屏蔽,但不建议长期使用此方案。

内容的提问来源于stack exchange,提问作者O. R. Mapper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:16:05