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

npm从GitHub拉取依赖时获取到错误旧版本问题求助

解决思路

1. 优先检查锁定文件

npm会将git依赖的具体commit hash写入package-lock.json或npm-shrinkwrap.json文件锁死版本,和你package.json里写的分支标识无关。你之前的操作仅删除了node_modules,没有删除锁定文件,因此每次安装都会复用锁定的旧版本commit。
操作步骤:

  • 删除B项目根目录下的package-lock.json(或npm-shrinkwrap.json)
  • 再次删除node_modules目录
  • 执行npm i重新安装
    如果不想删除整个锁定文件,可以单独执行npm update package-c,强制更新该依赖到分支最新版本,同时更新锁定文件中的对应hash。

2. 清理npm的git专属缓存

你之前执行的普通npm缓存清理,不会清除git依赖的专属缓存:npm会将拉取过的git依赖仓库缓存到~/.npm/_git-remotes/(Windows系统路径为%USERPROFILE%\.npm\_git-remotes)目录下,若缓存的仓库未拉取最新提交,就会一直安装旧版本。
操作步骤:

  • 执行npm cache clean --force强制清理所有缓存(包括git依赖缓存)
  • 或者手动进入上述git缓存目录,删除所有对应package-c的缓存文件夹
  • 重新执行安装命令

3. 检查依赖树是否存在版本冲突

可能B项目中存在其他间接依赖,也引入了package-c的旧版本,导致最终安装的是旧版。
操作步骤:

  • 在B项目根目录执行npm ls package-c
  • 检查输出的依赖树,确认是否有多个版本的package-c被引入,或被其他依赖锁死了版本

4. 对比npm运行配置差异

两个项目的npm本地配置可能存在差异,导致安装行为不同:

  • 分别在A、B项目根目录执行npm config list
  • 对比输出的配置项,重点检查prefer-offline、cache、git相关的配置,若B项目开启了prefer-offline会优先使用本地缓存而不拉取远程最新代码。

验证方法

安装完成后,进入B项目的node_modules/package-c目录,执行git log -1查看当前最新commit hash,和GitHub上package-c仓库main分支的最新commit hash对比,即可确认是否拉取到了最新版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:57:05