# fatboy-test **Repository Path**: coolguy/fatboy-test ## Basic Information - **Project Name**: fatboy-test - **Description**: 一些小测试使用的仓库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-02 - **Last Updated**: 2023-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FatBoy ## 升级rn相关事项 * 请参考[0.58-更新文档](doc/update.md) ## Kernel切出后新项目的初始化 * checkout到新的分支上(目前是v1.8.y开始切出的) * 手动删除android和ios目录(不删除目录会导致下一步执行报错) * 执行`git submodule update --init --recursive --depth 1` (由于库太大了,请带上depth参数) * 执行完上面命令后会生成android和ios目录,此时执行`npm run update-kernel`更新最新代码 * 之后如果kernel更新了代码之后,只需要执行`npm run update-kernel`即可 * 如果有一些报错,参考以下解决方案: * `git reset --hard origin/master` 可以将本地分支的 HEAD 指向与远程分支相同的提交,同时丢弃本地分支上的任何未提交更改 ## 一些原生上需要修改的文件 **安卓可以直接执行 `yarn fp`/`yarn fp production`切换线上或者线下的环境,或按照下面的文档切换** * android下 * app/java/tota123/util/AppDataUtils 下各种需要配置的项 * app/build.gradle 上修改版本号 * android.manifest 上修改配置信息(code-push server url / key) * ios *Supporting Files下的fatboy-Prefix.pch文件 的define开关 * fatboy/AppDelegeta.m 的IP地址 ## 新项目注意事项 * 执行`react-native run-ios` 报错信息为:throw err; ^ Error: spawnSync;请执行`chmod -R 777 node_modules`,再执行`react-native run-ios` * 跑`react-native run-ios`时在js上报错transform-runtime: 请将`node_modules/react-native/scripts/packager.sh`修改为 ``` THIS_DIR=$(dirname "$0") cd "$THIS_DIR/../../../" # node "./local-cli/cli.js" start "$@" node "node_modules/react-native/local-cli/cli.js" start "$@" ``` * 如果安卓无法正常打包,报错react-native-0.58.1找不到类似的错误,请将`package.json`文件中的依赖`react-native`修改为`0.58.1` * 如果还有问题,将`react-native-code-push`改成`5.6.x`,注意因为5.7.0开始的版本检测更新地址发生了变化,不要升级到这之后的版本 * 目前在一些node版本上会出现异常,具体表现可以参考这个[测试文档](https://docs.google.com/spreadsheets/d/1KmtNRT8mdsgJg2aMykRUL0eB3V2HdtDoU0ZePf38d2Y/edit?usp=sharing) (注意需要翻墙访问),已知的异常情况及解决方案如下: 0. 如果涉及到以下两项,直接执行`yarn modify` 1. 报错与`\node_modules\metro-config\src\defaults\blacklist.js`有关,请执行`node scripts/metro-config-modify`, 可能可以参考[这里的讨论](https://stackoverflow.com/questions/58120990/how-to-resolve-the-error-on-react-native-start) 2. `cb.apply is not a function` 请参考文章 [How I fixed a "cb.apply is not a function" error while using Gitbook](https://flaviocopes.com/cb-apply-not-a-function/), 执行`node scripts/graceful-modify`或手动 注释掉 `/graceful-fs/polyfills.js`的62-64行: ``` // fs.stat = statFix(fs.stat) // fs.fstat = statFix(fs.fstat) // fs.lstat = statFix(fs.lstat) ``` 3. `Module react-native-screens does not exist in the Haste module map` 这个问题可能出现在非常新的版本中?建议降级node版本,具体版本参考下面一点 4. 目前已知12.18.4会出现1和2的问题,可以按照上面步骤修复;目前测试发现node 11.13.0/12.9.1都没有问题;node 14可能会有问题3,暂时没有尝试修复方法。 **建议维持在node 12** 。 云冲测试结果表示10.15.1+6.4.1是没有问题的 ## 开发注意事项 * 人民币的符号请统一使用¥ * `this.props.navigation.setParams`最好放在`setTimeout(...,0)`中,因为某些手机可能会因为这个出现页面重新载入的问题 * 所有涉及到磁盘操作的API请考虑防重复点击 # 自建的CodePush相关参数 ``` Successfully added the "FatBoyAndroid" app, along with the following default deployments: ┌────────────┬───────────────────────────────────────┐ │ Name │ Deployment Key │ ├────────────┼───────────────────────────────────────┤ │ Production │ 2HW9ylCNLwYVPPTX2Zg2nXpTOAnl4ksvOXqog │ ├────────────┼───────────────────────────────────────┤ │ Staging │ XxFDtCvkILyCPOlFnBOF0WgaNpCx4ksvOXqog │ └────────────┴───────────────────────────────────────┘ Successfully added the "FatBoyIos" app, along with the following default deployments: ┌────────────┬───────────────────────────────────────┐ │ Name │ Deployment Key │ ├────────────┼───────────────────────────────────────┤ │ Production │ luCQIKAaxzfaRQ5oK5OIwbgZmpD04ksvOXqog │ ├────────────┼───────────────────────────────────────┤ │ Staging │ lzZgIccUNPDsOGnWt5xtiYifpqYw4ksvOXqog │ └────────────┴───────────────────────────────────────┘ ``` **注意,本地如果需要查看相关信息,请安装code-push-cli@2.1.9 (不支持3)** **css样式尽量用padding代替height(特大字体下,ui可能会变形),尽量不用lineHeight撑行高(特大字体下使用lineHeight,ios的文案会秃头)。** ## 网关改动 1. 新增node-forge,并移除掉重复的库,包括md5 和base-64 ,自己实现的base64等 1. 原有的md5改成getMd5 2. 记得通知平台新增/移除掉的库 2. 将isStaging移出到util/dev上,使用的时候不再需要inject ToolStore了 3. ajax的相关处理(参数处理和 接收返回的数据处理)都提出到util/handleAjax里边 4. 注意,之后所有的协议(除ajax中包含{original:true}外)均会走action/gateway,其规则是原有的协议url会变成action,替换斜杠为点即可 5. getUrl的逻辑小变动,之后直接使用.ajax时不再需要手动处理url了 6. 将eslint的规则修改了,不再使用airbnb的严格规则,采用eslint:recommend ## todo list 1. 由于网关改动引入的node-forge和crypto-js的实现重叠,后续准备移除后者,但是因为加密算法的细节问题,原有的OurStorage无法用新的加密算法重构,所以坐等几乎所有用户的数据迁移完成后再干掉crypto-js,目前预计3个月后 2. 干掉在开发工具上打出的各种信息,否则太卡了 ## 实用命令 1. 已修改不需要上传的文件(假定是config.js),请执行`git update-index --assume-unchanged config.js` ,如果后续需要上传,请执行`git update-index --no-assume-unchanged config.js`