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

创建Next.js应用遇npm弃用警告,切换Yarn解决求原因解析

关于Next.js项目中npm弃用警告切换Yarn后消失的原因解释

问题背景

使用npx create-next-app@latest .创建Next.js 14.2.5项目时,收到一系列npm弃用警告:

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.
npm warn deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm warn deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported

这些警告不影响项目运行,但通过CLI添加Sentry时仍会弹出,尤其是inflight@1.0.6。尝试过安装警告推荐的包、将eslint版本从^8升级到^9,并执行npm install、npm install --force、npm install --legacy-peer-deps等操作,均无法消除警告。切换到Yarn后,警告完全消失。

核心原因:npm与Yarn的依赖解析逻辑差异

这些警告均来自项目的深层传递依赖(不是你直接在package.json中声明的包),Yarn和npm的依赖处理逻辑差异导致了结果不同:

  • 版本选择策略不同
    npm的依赖解析算法在处理嵌套依赖时,可能会保留满足版本范围的旧版包。比如inflight@1.0.6是glob@7.x的依赖,npm可能因为依赖树的嵌套关系,仍选择旧版glob,从而带出弃用的inflight;而Yarn会优先选择兼容的最新可用版本(比如glob@9+),从根源上避免引入已弃用的依赖。

  • Peer依赖处理更严格
    升级eslint到v9时,npm的peer依赖处理可能没有完全替换掉旧的eslint相关依赖(如@humanwhocodes/config-array);而Yarn会严格匹配新版本eslint的peer依赖要求,自动使用替代包(如@eslint/config-array),因此不会触发弃用警告。

  • 缓存与安装行为差异
    npm的缓存机制可能复用了之前下载的旧版依赖包,即使重新执行安装也不会主动替换;Yarn的缓存管理更倾向于拉取符合当前依赖树的最优版本,减少旧包被复用的概率。

需要注意:直接安装警告中推荐的包无法解决问题,因为这些弃用包是深层依赖引入的,只有依赖的上游包更新版本,或者包管理器选择更优的依赖版本才能消除警告。

内容的提问来源于stack exchange,提问作者Rendo Hugh Mann Sama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:05:18