()热更新原理
React Native会将所有需要加载的js文件都打包在一个bundle文件中,而app运行时会加载该文件。所以,热更新的一个可行思路是动态替换该bundle文件,然后重启app。如果修改原生代码则需要重新打包app。开发环境时使用调试工具可以 Reload JS其实就是替换bundle文件。
微软的CodePush(https://microsoft.github.io/code-push)是实现了热更新的一个工具,但是CodePush的服务器在国外,国内使用的话速度并不理想,所以需要自建CodePush服务提供更好的体验。
自建CodePush 服务分为三个部分:服务端、客户端、React Native
[]服务端
(1)安装MySQL并启动服务,需要记住数据库的账户和密码
MySQL下载地址:https://dev.mysql.com/downloads/mysql
(2)安装code-push-server
code-push-server项目地址:https://github.com/lisong/code-push-server
{1}下载code-push-server代码,并安装相关资源
// clone代码
git clone https://github.com/lisong/code-push-server.git
// 进入项目并安装资源
cd code-push-server && npm install
{2}修改config/config.js 文件,在db对象中添加数据库信息
db: {
username: process.env.RDS_USERNAME || "root", //数据库账户
password: process.env.RDS_PASSWORD || "root123456", //数据库账户密码,需要自己设置
database: process.env.DATA_BASE || "codepush", //新建的数据库表名
host: process.env.RDS_HOST || "127.0.0.1",
port: process.env.RDS_PORT || 3306,
dialect: "mysql",
logging: false
},
{3}在code-push-server目录下执行命令,创建数据库表
// 初始化mysql数据库
./bin/db init --dbhost localhost --dbuser root --dbpassword 数据库密码
或者
./bin/db init --dbhost 127.0.0.1 --dbuser root --dbpassword 数据库密码
创建数据库表时,如果出现以下报错:
Error: Client does not support authentication protocol requested by server; consider upgrading MySQL client
解决方案如下:参考 https://blog.csdn.net/qq_19707521/article/details/80226321
1.配置MySQL环境变量
在.bash_profile的末尾添加两行
alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin
2.登录MySQL,执行以下语句
//登录MySQL
mysql -u root -p
#接着输入你的数据库密码
//一次执行下面三条语句
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '数据库密码';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '数据库密码';
SELECT plugin FROM mysql.user WHERE User = 'root';
{4}修改config/config.js 文件