react-native-webview打补丁本地正常CI环境报错如何解决
问题诱因
- 补丁方案混用冲突:你在
package.json中使用了Yarn 3+(Berry版本)专属的patch:协议写法,但补丁文件是传统patch-package工具生成的格式,两者的路径解析规则完全不同。patch-package生成的diff路径是相对于依赖包自身根目录的,而Yarn内置的patch:协议默认要求路径相对于项目根目录,直接使用就会出现匹配不到文件的报错。 - 路径修改错误:你手动给补丁路径加上
node_modules/react-native-webview前缀后,Yarn应用补丁时会自动在依赖包的根目录下查找路径,拼接后就出现了node_modules/react-native-webview/node_modules/react-native-webview/...的重复路径,触发文件不存在的报错。 - CI缓存干扰:CI环境可能缓存了未打补丁的依赖版本、损坏的补丁缓存,导致每次安装都直接读取旧的异常内容,补丁无法正常应用。
解决方法
根据你的技术栈选择任意一种统一的补丁方案即可:
方案1:使用Yarn 3+内置补丁功能(适配当前patch:协议写法)
- 将补丁文件的路径恢复为原始格式,不需要加任何前缀:
diff --git a/apple/RNCWebView.m b/apple/RNCWebView.m index ff9ff9e0..dfea91a8 100644 --- a/apple/RNCWebView.m +++ b/apple/RNCWebView.m @@ -194,12 +194,18 @@ - (void)dealloc ...
- 确认
package.json中补丁的相对路径正确:如果补丁存放在项目根目录下的scripts/patches/文件夹,保持原有写法即可,如果是monorepo子包引用,需要调整为相对于项目根目录的正确相对路径。 - 本地执行
yarn install验证补丁应用正常后,提交修改后的补丁文件、yarn.lock到代码仓库。 - 清空CI环境的依赖缓存,重新执行部署流程即可。
方案2:使用传统patch-package工具
- 将
package.json中react-native-webview的依赖版本改回原版,移除patch:前缀:
"dependencies": { "react-native-webview": "11.0.3", ... }
- 确保补丁文件存放在
patch-package默认读取的patches/根目录,或者在package.json中配置补丁路径指向scripts/patches。 - 修改CI的执行脚本,在
yarn install之后增加执行yarn patch-package的步骤,确保依赖安装完成后自动应用补丁。 - 提交所有修改后清空CI缓存,重新执行部署流程即可。
内容的提问来源于stack exchange,提问作者flaviut
相关产品推荐
相关产品推荐

