给三方模块打补丁

如果是 node_modules 下的三方模块

使用 patch-package 工具即可

Step1:安装

注意只在 dev 下生效即可

1
yarn add patch-package --dev

Step2:创建补丁

  1. 修改 node_modules 下的三方代码
  2. 根目录下执行以下代码即可创建 patches 补丁文件夹,其中 TargetPackageName 为你要修改的三方模块的名字
1
npx patch-package TargetPackageName

Step3:添加自动化脚本

package.json 的 scripts 中添加代码 "postinstall": "patch-package",最终效果如下图

1
2
3
4
5
6
7
8
9
10
11
12
{
...
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"start": "react-native start",
"test": "jest",
"lint": "eslint .",
"postinstall": "patch-package" // 此处是新增代码
},
...
}

Step4:提交到 Git

将 patches 文件夹和 package.json 的修改提交到 Git 即可

如果该模块在 Pods 下但不在 node_modules

使用 cocoapods-patch 工具

Step1:安装

Gemfile 中添加

1
gem 'cocoapods-patch'

然后执行

1
bundle install

Step2:创建补丁

pod install 后,修改 Pods 中三方模块的代码

然后创建补丁

1
pod patch create XXX

Step3:自动应用补丁

在 Podfile 中添加

1
plugin 'cocoapods-patch'

这样,每次执行 pod install 后,都会自动应用补丁

注意事项

  1. patch 文件可能含有 .DS_Store 文件,需要手动删除
  2. 自测补丁的时候,如果 patch 文件有多个补丁,Pods 源码需要同时删除所有补丁再应用才能成功。也就是说,如果一个库有多个补丁,只要一个应用出错,那么这个库的所有补丁都不会生效
  1. 如果是 node_modules 下的三方模块
    1. Step1:安装
    2. Step2:创建补丁
    3. Step3:添加自动化脚本
    4. Step4:提交到 Git
  2. 如果该模块在 Pods 下但不在 node_modules
    1. Step1:安装
    2. Step2:创建补丁
    3. Step3:自动应用补丁
    4. 注意事项