搭建本地 code-push-server 以及 code-push 的使用

作者 大宝 日期 2018-07-04
搭建本地 code-push-server 以及 code-push 的使用

搭建本地 code-push-server

参考 GitHub - lisong/code-push-server

1,安装

通过 npm package 安装

$ npm install code-push-server -g

$ code-push-server-db init --dbhost localhost --dbuser root --dbpassword # 初始化mysql数据库

$ code-push-server # 启动服务 浏览器中打开 http://127.0.0.1:3000

通过 sourse code 安装

$ git clone https://github.com/lisong/code-push-server.git

$ cd code-push-server

$ npm install

$ ./bin/db init --dbhost localhost --dbuser root --dbpassword # 初始化mysql数据库

$ ./bin/www # 启动服务 浏览器中打开 http://127.0.0.1:3000

注意事项:

执行 code-push-server-db 或 ./bin/db 命令之前,需要安装并启动 mysql 数据库。

2,升级

通过npm package 升级

$ code-push-server-db upgrade --dbhost localhost --dbuser root --dbpassword # 升级codepush数据库

$ # restart code-push-server

通过 sourse code 升级

$ cd /path/to/code-push-server

$ git pull --rebase origin master

$ ./bin/db upgrade --dbhost localhost --dbuser root --dbpassword # 升级codepush数据库

$ # restart code-push-server

3,配置

打开 code-push-server/config/config.js,修改配置信息。

如果是搭建本地服务,则需要修改 local 字段中的 downloadUrl 为本机IP,如 http://192.168.1.101/download,同时要修改 local 字段中的 storageDir 和 common 字段的 dataDir。

4,启动服务

$ node ./bin/www

或 code-push-server

注意每次修改 config.js 之后,都要重启服务。

指定配置文件和环境变量

CONFIG_FILE=/path/to/config.js NODE_ENV=production node ./bin/www

或 CONFIG_FILE=/path/to/config.js NODE_ENV=production code-push-server

修改 Host / Port

$ PORT=3000 HOST=127.0.0.1 NODE_ENV=production node ./bin/www

或 PORT=3000 HOST=127.0.0.1 NODE_ENV=production code-push-server

使用 code-push

参考 GitHub - Microsoft/react-native-code-push

code-push/cli at master · Microsoft/code-push · GitHub

1,安装客户端命令行

$ npm install code-push-cli@latest -g

$ code-push login http://127.0.0.1:3000

login in browser 的 account:admin password:123456

如果提示已经登录,且登录的是别的账号,需要先执行 code-push logout,或者直接删除 ~/.code-push.config 文件

如果想修改密码,则执行命令:

$ curl -X PATCH -H "Authorization: Bearer mytoken" -H "Accept: application/json" -H "Content-Type:application/json" -d '{"oldPassword":"123456","newPassword":"654321"}' http://127.0.0.1:3000/users/password

其实这就是一个管理端工具。工具的使用详情见:

code-push/cli at master · Microsoft/code-push · GitHub

code-push/README-cn.md at master · Microsoft/code-push · GitHub

2,安装RN工程依赖

$ cd /path/to/project

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

使用方式大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import codePush from "react-native-code-push";
let codePushOptions = { checkFrequency: codePush.CheckFrequency.ON_APP_RESUME };

class App extends Component {
render() {
return (<Root/>);
}
componentDidMount() {
codePush.sync({
updateDialog: true,
installMode: codePush.InstallMode.IMMEDIATE
});
}
}
App = codePush(codePushOptions)(App);
export default App;

如果期望更及时的获得更新,可以在每次APP从后台进入前台的时候去主动的检查更新。在应用的根 component的componentDidMount 中添加如下代码:

1
2
3
AppState.addEventListener("change", (newState) => {
newState === "active" && codePush.sync();
});

详细使用方式请参考:

react-native-code-push/api-js.md at master · Microsoft/react-native-code-push · GitHub

3,iOS 工程安装依赖及配置

参考 react-native-code-push/setup-ios.md at master · Microsoft/react-native-code-push · GitHub

pod 'CodePush', :path => '../node_modules/react-native-code-push'

使用方式大致如下:

1
2
3
4
5
6
7
8
#import <CodePush/CodePush.h>

NSURL *jsCodeLocation;
#ifdef DEBUG
jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#else
jsCodeLocation = [CodePush bundleURL];
#endif

并在 info.plist 中可以配置以下字段:

CodePushDeploymentKey

CodePushServerURL

CodePushPublicKey

4,注意事项

如果是真机测试的话,需要把 config.js 文件中 common 下的 downloadUrl 地址和 Xcode->info.plist 中的 CodePushServerURL 都改成你当前Wifi下的IP地址。


参考资料

GitHub - lisong/code-push-server

code-push和code-push-server - 简书

code-push/cli at master · Microsoft/code-push · GitHub

code-push/README-cn.md at master · Microsoft/code-push · GitHub

GitHub - Microsoft/react-native-code-push

react-native-code-push/setup-ios.md at master · Microsoft/react-native-code-push · GitHub

react-native-code-push/api-js.md at master · Microsoft/react-native-code-push · GitHub

react native codepush热更新解决成功更新 - 简书

RNStudyNotes/React Native应用部署、热更新-CodePush最新集成总结 at master · crazycodeboy/RNStudyNotes · GitHub