package.json依赖GitHub仓库后,修改代码重新安装不生效怎么办?
解决GitHub仓库依赖修改后无法生效的问题
我之前也碰到过一模一样的情况,直接用GitHub URL作为依赖时,yarn不会自动感知远程仓库的变更,这主要是受它的缓存机制和版本识别逻辑影响。下面是几个实用的解决方案,按推荐程度排序:
1. 开发阶段用本地链接(最高效)
如果还在频繁修改这个依赖库,完全没必要每次推远程再重新安装,用yarn link直接关联本地仓库就行:
- 打开你本地克隆的
react-native-maps仓库目录,执行:yarn link - 回到你的项目根目录,执行:
之后你对本地仓库的任何修改都会直接同步到项目中,不需要推送或重新install,开发效率直接拉满。yarn link react-native-maps
2. 强制拉取最新的远程仓库内容
如果已经把变更推到远程,想让项目获取最新版本,可以直接强制更新这个依赖:
yarn add https://github.com/Stophface/react-native-maps-0.20.1.git --force
或者用upgrade命令:
yarn upgrade react-native-maps --force
3. 清除yarn缓存再重新安装
有时候yarn会缓存旧的仓库快照,导致新变更无法被拉取,先清除该依赖的缓存:
yarn cache clean react-native-maps
然后再执行:
yarn install
4. 指定分支/Commit/Tag(推荐长期做法)
在package.json里给依赖URL加上分支、Commit哈希或者Tag后缀,这样yarn能明确识别版本变化:
比如指定分支:
"dependencies": { "react": "^16.3.0-alpha.1", "react-native": "0.54.0-rc.3", "react-native-maps": "https://github.com/Stophface/react-native-maps-0.20.1.git#main" }
或者指定Commit哈希(最精准):
"react-native-maps": "https://github.com/Stophface/react-native-maps-0.20.1.git#abc123def4567890abcdef1234567890abcdef12"
之后每次该分支有新推送,执行yarn upgrade react-native-maps就能拉取最新内容了。
背后的原因
当你只写仓库URL而不指定版本标识时,yarn第一次安装会拉取仓库默认分支的当前Commit,之后会把这个Commit作为该依赖的"版本"缓存起来。即使你推送了新的Commit到远程,yarn会认为依赖的"版本"没有变化(因为URL没变),所以不会主动去拉取最新的内容。
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

