React-Native热更新,快速吃鸡

作者: 大猪大猪 | 来源:发表于2017-11-14 17:38 被阅读241次

    哈哈,在简书写的第一篇文章,步入正题,此文使用当前最新版本的RNCode-Push进行演示,其中的参数不会过多进行详细解释,更多参数解释可参考其它文章,这里只保证APP能正常进行热更新操作,方便快速入门,开始来快活吧。

    react-native

    操作指南

    以下操作在Mac系统上完成
    项目地扯https://github.com/dounine/dounineApp
    Branches:3分钟完成React-Native热更新

    1. 创建React-Native项目

    react-native init dounineApp
    

    2. 安装code-push-cli

    npm install -g code-push-cli
    

    3. 注册code-push帐号

    code-push register
    Please login to Mobile Center in the browser window we've just opened.
    
    Enter your token from the browser: 
    #会弹出一个浏览器,让你注册,可以使用github帐号对其进行授权,授权成功会给一串Token,点击复制,在控制进行粘贴回车(或者使用code-push login命令)。
    
    Enter your token from the browser:  b0c9ba1f91dd232xxxxxxxxxxxxxxxxx
    #成功提示如下方
    Successfully logged-in. Your session file was written to /Users/huanghuanlai/.code-push.config. You can run the code-push logout command at any time to delete this file and terminate your session.
    
    image.png

    4. 在code-push添加一个ios的app

    code-push app add dounineApp-ios ios react-native
    #成功提示如下方
    Successfully added the "dounineApp-ios" app, along with the following default deployments:
    ┌────────────┬──────────────────────────────────────────────────────────────────┐
    │ Name       │ Deployment Key                                                   │
    ├────────────┼──────────────────────────────────────────────────────────────────┤
    │ Production │ yMAPMAjXpfXoTfxCd0Su9c4-U4lU6dec4087-57cf-4c9d-b0dc-ad38ce431e1d │
    ├────────────┼──────────────────────────────────────────────────────────────────┤
    │ Staging    │ IjC3_iRGEZE8-9ikmBZ4ITJTz9wn6dec4087-57cf-4c9d-b0dc-ad38ce431e1d │
    └────────────┴──────────────────────────────────────────────────────────────────┘
    

    5. 继续在code-push添加一个android的app

    code-push app add dounineApp-android android react-native
    #成功提示如下方
    Successfully added the "dounineApp-android" app, along with the following default deployments:
    ┌────────────┬──────────────────────────────────────────────────────────────────┐
    │ Name       │ Deployment Key                                                   │
    ├────────────┼──────────────────────────────────────────────────────────────────┤
    │ Production │ PZVCGLlVW-0FtdoCF-3ZDWLcX58L6dec4087-57cf-4c9d-b0dc-ad38ce431e1d │
    ├────────────┼──────────────────────────────────────────────────────────────────┤
    │ Staging    │ T0NshYi9X8nRkIe_cIRZGbAut90a6dec4087-57cf-4c9d-b0dc-ad38ce431e1d │
    └────────────┴──────────────────────────────────────────────────────────────────┘
    

    6. 在项目根目录添加react-native-code-push

    npm install react-native-code-push --save
    #或者
    yarn add react-native-code-push
    

    7. link react-native-code-push

    react-native link
    Scanning folders for symlinks in /Users/huanghuanlai/dounine/oschina/dounineApp/node_modules (8ms)
    ? What is your CodePush deployment key for Android (hit <ENTER> to ignore) T0NshYi9X8nRkIe_cIRZGbAut90a6dec4087-57cf-4c9d-b0dc-ad38ce431e1d
    
    #将刚才添加的Android App的Deployment Key复制粘贴到这里,复制名为Staging测试Deployment Key。
    
    rnpm-install info Linking react-native-code-push android dependency 
    rnpm-install info Android module react-native-code-push has been successfully linked 
    rnpm-install info Linking react-native-code-push ios dependency 
    rnpm-install WARN ERRGROUP Group 'Frameworks' does not exist in your Xcode project. We have created it automatically for you.
    rnpm-install info iOS module react-native-code-push has been successfully linked 
    Running ios postlink script
    ? What is your CodePush deployment key for iOS (hit <ENTER> to ignore) IjC3_iRGEZE8-9ikmBZ4ITJTz9wn6dec4087-57cf-4c9d-b0dc-ad38ce431e1d
    
    #继续复制Ios的Deployment Key
    
    Running android postlink script
    

    8. 在react-nativeApp.js文件添加自动更新代码

    ...
    import codePush from "react-native-code-push";
    const codePushOptions = { checkFrequency: codePush.CheckFrequency.MANUAL };
    export default class App extends Component<{}> {
      
      componentDidMount(){
        codePush.sync({
          updateDialog: true,
          installMode: codePush.InstallMode.IMMEDIATE,
          mandatoryInstallMode:codePush.InstallMode.IMMEDIATE,
          //deploymentKey为刚才生成的,打包哪个平台的App就使用哪个Key,这里用IOS的打包测试
          deploymentKey: 'IjC3_iRGEZE8-9ikmBZ4ITJTz9wn6dec4087-57cf-4c9d-b0dc-ad38ce431e1d',
          });
      }
      ...
    

    9. 运行项目在ios模拟器上

    react-native run-ios
    

    如图下所显
    1:开启debug调试
    2:CodePush已经成功运行
    目前App已经是最新版本

    image.png

    10. 发布一个ios新版本

    code-push release-react dounineApp-ios ios
    #发布成功如图下
    Detecting ios app version:
    
    Using the target binary version value "1.0" from "ios/dounineApp/Info.plist".
    
    Running "react-native bundle" command:
    
    node node_modules/react-native/local-cli/cli.js bundle --assets-dest /var/folders/m_/xcdff0xd62j4l2xbn_nfz00w0000gn/T/CodePush --bundle-output /var/folders/m_/xcdff0xd62j4l2xbn_nfz00w0000gn/T/CodePush/main.jsbundle --dev false --entry-file index.js --platform ios
    Scanning folders for symlinks in /Users/huanghuanlai/dounine/oschina/dounineApp/node_modules (10ms)
    Scanning folders for symlinks in /Users/huanghuanlai/dounine/oschina/dounineApp/node_modules (10ms)
    Loading dependency graph, done.
    
    bundle: start
    bundle: finish
    bundle: Writing bundle output to: /var/folders/m_/xcdff0xd62j4l2xbn_nfz00w0000gn/T/CodePush/main.jsbundle
    bundle: Done writing bundle output
    
    Releasing update contents to CodePush:
    
    Upload progress:[==================================================] 100% 0.0s
    Successfully released an update containing the "/var/folders/m_/xcdff0xd62j4l2xbn_nfz00w0000gn/T/CodePush" directory to the "Staging" deployment of the "dounineApp-ios" app.
    

    11. 重新Load刷新应用

    image.png

    12. 安卓发布
    与上面9~11步骤是一样的,命令改成Android对应的,以下命令结果简化

    #1.修改App.js的deploymentKey为安卓的
    ...
    deploymentKey:'T0NshYi9X8nRkIe_cIRZGbAut90a6dec4087-57cf-4c9d-b0dc-ad38ce431e1d'
    ...
    #2.运行
    react-native run-android
    #3.发布
    code-push release-react dounineApp-android android
    #4.刷新应用,如下图
    
    image.png

    至此已经完成RN热更新,进阶内容请参考其它文章。

    相关文章

      网友评论

      • 2b1ed5b649ed:为什么一定要新增一个“staging”,不能直接用“debug” ?
      • Wlfcss:国内使用的话更新速度慢吗?不知道是否用过国内rn中文网的pushy,与之对比如何?
        大猪大猪:@蓬蓬鹏鹏 可以的
        46eb437d441a:现在code push热更新功能能不能上架,我这还没有禁之前做好的功能现在还没有提交审核,不知道现在还可以用不
        大猪大猪:没有对比过,不发表评论。
      • 玉思盈蝶:想问一下就是直接改源码然后发布就可以了?使用的用户就会收到安装更新的提示么,不需要再上架商店和AppStore了么?需要改版本号什么的么?
        大猪大猪:@玉思盈蝶 到时候再写一篇进阶的吧
        玉思盈蝶:@dounine 什么意思
        大猪大猪:@玉思盈蝶 这个属于进阶文章了噢

      本文标题:React-Native热更新,快速吃鸡

      本文链接:https://www.haomeiwen.com/subject/ccmfvxtx.html