如何解决EAS构建的Expo生产APK中的React Native ViewPropTypes错误
我完全懂你现在的头疼事儿——调试的时候手动改了React Native的源码,总算把ViewPropTypes的错误搞定了,结果用EAS打包生产APK的时候,老问题又冒出来了。这是因为EAS构建时会重新拉取依赖包,你本地手动改的代码根本不会被带到构建环境里。不过别担心,咱们用patch-package这个工具就能解决这个问题,让修复在构建时自动生效。
具体解决步骤:
安装必要工具和依赖
首先安装patch-package(用来生成和应用依赖补丁),以及deprecated-react-native-prop-types(就是你之前用来替换ViewPropTypes的包):# npm 用户 npm install patch-package postinstall-postinstall --save-dev npm install deprecated-react-native-prop-types --save # yarn 用户 yarn add patch-package postinstall-postinstall --dev yarn add deprecated-react-native-prop-types手动修改React Native源码(和你之前调试时的操作一样)
找到你项目中node_modules/react-native里需要修改的文件(比如引用了ViewPropTypes的Libraries/Components/View/View.js等),把原来的:import { ViewPropTypes } from 'react-native';替换成:
import { ViewPropTypes } from 'deprecated-react-native-prop-types';确保所有出现
ViewPropTypes的地方都替换正确。生成持久化补丁
在项目根目录运行以下命令,生成补丁文件:npx patch-package react-native执行完后,项目根目录会多出一个
patches文件夹,里面存放着针对react-native包的补丁文件,把这个文件夹提交到你的Git仓库里。配置自动应用补丁的脚本
打开项目的package.json,在scripts部分添加postinstall脚本:"scripts": { // 保留你原来的其他脚本,比如 "start": "expo start" 等 "postinstall": "patch-package" }这样每次安装依赖(包括EAS构建时的依赖安装步骤),都会自动执行这个脚本,把补丁应用到
react-native包上。重新用EAS构建APK
现在你可以重新触发EAS构建了,这次构建过程中,EAS会先安装所有依赖,然后自动应用咱们生成的补丁,React Native的代码就是修复后的版本,不会再出现下面的错误了:01-31 18:26:47.548 18926 18982 E ReactNativeJS: Invariant Violation: ViewPropTypes has been removed from React Native. Migrate to ViewPropTypes exported from 'deprecated-react-native-prop-types'.
额外注意点:
- 如果之后你升级了
react-native的版本,需要重新执行步骤2和3,生成新的补丁文件,因为版本升级可能会覆盖原来的修改。 - 提交代码时,别忘了把
patches文件夹一起提交,这样EAS构建环境才能获取到补丁文件。
备注:内容来源于stack exchange,提问作者derik_12

