美文网首页
一次搭建私有code-push服务,进行RN热更新之旅

一次搭建私有code-push服务,进行RN热更新之旅

作者: r4ggj | 来源:发表于2018-11-12 18:19 被阅读0次
    链接:

    code-push-server 热更新服务
    https://github.com/lisong/code-push-server

    code-push-web 热更新后台管理UI(没有更新,有bug)
    https://github.com/lisong/code-push-web

    react-native-code-push
    https://github.com/lisong/react-native-code-push (code-push-server作者改写的)
    https://github.com/Microsoft/react-native-code-push (微软)

    参考

    [creazybody]https://github.com/crazycodeboy/RNStudyNotes/tree/master/React%20Native%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2%E3%80%81%E7%83%AD%E6%9B%B4%E6%96%B0-CodePush%E6%9C%80%E6%96%B0%E9%9B%86%E6%88%90%E6%80%BB%E7%BB%93

    =========================

    正确使用code-push热更新

    • 苹果App允许使用热更新Apple's developer agreement, 为了不影响用户体验,规定必须使用静默更新。 Google Play不能使用静默更新,必须弹框告知用户App有更新。中国的android市场必须采用静默更新(如果弹框提示,App会被“请上传最新版本的二进制应用包”原因驳回)。
    • react-native 不同平台bundle包不一样,在使用code-push-server的时候必须创建不同的应用来区分(eg. CodePushDemo-ios 和 CodePushDemo-android)
    • react-native-code-push只更新资源文件,不会更新java和Objective C,所以npm升级依赖包版本的时候,如果依赖包使用的本地化实现, 这时候必须更改应用版本号(ios修改Info.plist中的CFBundleShortVersionString, android修改build.gradle中的versionName), 然后重新编译app发布到应用商店。
    • 推荐使用code-push release-react 命令发布应用,该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production)
    • 每次向App Store提交新的版本时,也应该基于该提交版本同时向code-push-server发布一个初始版本。(因为后面每次向code-push-server发布版本时,code-puse-server都会和初始版本比较,生成补丁版本)

    一、搭建服务

    系统:Ubuntu
    所需环境:node , npm,mysql
    1.安装mysql

    sudo apt-get install mysql-server
    apt-get isntall mysql-client
    sudo apt-get install libmysqlclient-dev
    

    安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功:

    sudo netstat -tap | grep mysql
    

    通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。

    登陆mysql数据库可以通过如下命令:

     mysql -u root -p 
    

    -u 表示选择登陆的用户名, -p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。

    mysql 8.x有一个bug,登录mysql,后执行下面的命令

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';
    
    FLUSH PRIVILEGES;
    
    百度mysql的启动、停止,重启,修改密码命令。加入开机启动。

    2.安装pm2

    sudo npm i -g pm2
    

    3.安装code-push-server

    git clone https://github.com/lisong/code-push-server.git
    cd code-push-server
    npm install
    

    4.初始化数据库
    进入源码目录,执行

    ./bin/db init --dbhost "your mysql host" --dbport "your mysql port"  --dbuser "your mysql user" --dbpassword "your mysql password"
    

    5.编辑config/config.js
    local.storageDir ---------- 存储热更新增量包的文件夹绝对路径,确保文件夹存在且有读写权限
    local.downloadUrl --------- 当前主机ip
    common.dataDir --------- 增量文件计算文件的文件夹绝对路径,确保文件夹存在且有读写权限
    common.codePushWebUrl ----------- web管理页面url
    jwt.tokenSecret ----------- token生成,推荐使用 https://www.grc.com/passwords.htm 获取(63 random alpha-numeric characters (a-z, A-Z, 0-9)),替换INSERT_RANDOM_TOKEN_KEY
    db ------------ 数据库设置 username,password,host,port 改成自己的

    6.创建process.json

    {
      "apps": [
        {
          "name": "code-push-server",
          "max_memory_restart": "300M",
          "script": "/code-push-server源码文件夹绝对路径/bin/www",
          "instances": "max",
          "exec_mode": "cluster",
          "env": {
            "NODE_ENV": "production",
            "PORT": 3000,
            "CONFIG_FILE": "/code-push-server源码文件夹绝对路径/config/config.js"
          }
        }
      ]
    }
    

    注释:instances //开启实例数量,max为cpu核数 exec_mode: //集群模式,最大提升网站并发

    7.启动停止重启服务
    pm2 start/stop/restart process.json

    8.测试是否成功启动

    curl -I http://YOUR_CODE_PUSH_SERVER_IP:3000/

    return httpCode 200 OK

    二、创建热更新app

    1.安装code-push-cli

     npm install code-push-cli@latest -g
    

    2.登录web获取token
    code-push login http://YOU_SERVICE_IP:3000

    3.改管理员密码(默认:账号:admin 密码:123456)
    curl -X PATCH -H "Authorization: Bearer 在页面获取的TOKEN" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"新密码"}' http://YOU_SERVICE_IP:3000/users/password
    4.分平台创建热更新app,参考其他文章;

    三、移动端集成react-native-code-push

    1.安装 react-native-code-push

    npm install --save react-native-code-push@latest
    react-native link react-native-code-push
    

    注意:是否替换成code-push-server作者github仓库的版本还没研究
    2.集成
    参考其他文章
    3.使用
    js入口需要热更新的部分代码App,需要包裹在CodePush下

     CodePush({ checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME })(App)
    

    componentWillMount(){
    CodePush.disallowRestart();
    }
    componentDidMount(){
    CodePush.allowRestart();
    //其他代码,检查更新
    }

    相关文章

      网友评论

          本文标题:一次搭建私有code-push服务,进行RN热更新之旅

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