如何更新next-drupal内部依赖的next@13至14以修复安全漏洞?
我项目原本用的是 next@13.5.6 和 next-drupal@1.6.0,package.json 配置如下:
"dependencies": { "next": "^13", "next-drupal": "^1.6.0", }
因为 next@13 存在安全漏洞且 next@14 已修复该问题,我执行 npm install next@14.2.3 将主依赖的 next 升级到了 ^14.2.3,更新后的 package.json 是这样:
"dependencies": { "next": "^14.2.3", "next-drupal": "^1.6.0", }
但运行 npm audit fix 时发现,next-drupal 自身的嵌套依赖(node_modules/next-drupal/node_modules/next)仍使用 next@13.5.6,存在高风险漏洞:
next >=13.4.0 <14.1.1 Severity: high Next.js Server-Side Request Forgery in Server Actions fix available via `npm audit fix` node_modules/next-drupal/node_modules/next
在 package-lock.json 中也能查到该子依赖的版本为13.5.6,现在需要把这个嵌套的 next 升级到14版本以修复漏洞,该怎么做?
方法一:用 npm overrides 强制替换子依赖版本
直接在项目的 package.json 中添加 overrides 字段,强制让 next-drupal 使用根目录指定的 next@14.2.3:
{ "dependencies": { "next": "^14.2.3", "next-drupal": "^1.6.0" }, "overrides": { "next-drupal": { "next": "$next" } } }
添加完成后执行以下命令重新安装依赖:
npm install
$next 会自动引用根目录中指定的 next 版本,从而替换掉 next-drupal 嵌套的旧版 next。
方法二:升级 next-drupal 到兼容 next@14 的版本
先确认 next-drupal 是否有支持 next@14 的新版本,若有则直接升级:
npm install next-drupal@latest
升级后重新检查依赖,新版本的 next-drupal 通常已经适配了 next@14,不会再嵌套旧版 next。
方法三:清理依赖后重新安装
如果上述方法无效,可尝试删除本地依赖文件和锁文件,让 npm 重新解析依赖树:
# 删除 node_modules 和 package-lock.json rm -rf node_modules package-lock.json # 重新安装所有依赖 npm install
这种方式会让 npm 优先使用根目录指定的 next@14.2.3,避免嵌套安装旧版本。
注意点
- 使用
overrides前,建议确认next-drupal@1.6.0与next@14.2.3不存在兼容性问题,若运行出现报错,优先选择升级next-drupal。 - 操作完成后,记得运行
npm audit验证漏洞是否已修复。
内容的提问来源于stack exchange,提问作者Ricardo Castañeda

