CodePush簡介
CodePush 是微軟提供的一套提供給 React Native 和 Cordova 開發(fā)者,直接部署移動(dòng)應(yīng)用更新給用戶設(shè)備的云服務(wù)口猜。CodePush 作為一個(gè)中央倉庫冻押,開發(fā)者可以推送更新 (JS, HTML, CSS and images)梁沧,應(yīng)用可以從客戶端 SDK 里面查詢更新碧库。CodePush 可以讓應(yīng)用有更多的可確定性涡贱,也可以讓你直接接觸用戶群堪夭。在修復(fù)一些小問題和添加新特性的時(shí)候愕把,不需要經(jīng)過二進(jìn)制打包,可以直接推送代碼進(jìn)行實(shí)時(shí)更新森爽。
關(guān)于熱更新
React Native 官方并沒有提供熱更新的技術(shù)方案恨豁,但是它是支持熱更新的。
React Native 中的熱更新有點(diǎn)像 App 的版本更新爬迟,也就是根據(jù)查詢 server 端的版本和手機(jī)端目前 App 的版本進(jìn)行對比橘蜜,然后來執(zhí)行是否更新的操作。
根本原因在于 React Native 的加載啟動(dòng)機(jī)制:React Native 會(huì)將一系列資源打包成js bundle文件付呕,系統(tǒng)加載js bundle文件计福,解析并渲染。所以徽职,React Native熱更新的根本原理就是更換js bundle文件象颖,并重新加載,新的內(nèi)容就完美的展示出來了姆钉。
一说订。CodePush熱更新組件詳細(xì)接入教程《安裝和RN集成》
1、安裝 CodePush CLI
code-push register
這將會(huì)啟動(dòng)瀏覽器陶冷,要求驗(yàn)證Github或微軟帳號(hào)。一旦驗(yàn)證成功筋讨,它將創(chuàng)建一個(gè)CodePush帳號(hào)跟你的Github或MSA相連埃叭,并生成一個(gè)訪問密鑰(Access Key),然后你可以拷貝/粘貼到CLI(它會(huì)提示你這樣做)
如果沒有自動(dòng)打開瀏覽器悉罕,檢查設(shè)置默認(rèn)的瀏覽器
3赤屋、//熱更新平臺(tái)的賬號(hào)信息
register info code-push for android
github username: wq
password: xxxx
4、驗(yàn)證我的登錄是否成功
$ code-push login
5壁袄、在CodePush服務(wù)器注冊App(不同平臺(tái)使用不同的名字)
添加Android平臺(tái)應(yīng)用;smallred是你app_name
code-push app add <appName> <os> <platform>
如:
$ code-push app add smallred Android react-native
│ Name │ Deployment Key │
│ Production │ Fhxxx57 │
│ Staging │ atxxx57 │
1-如果你的App既有iOS又有Android类早,請為不同平臺(tái)創(chuàng)建單獨(dú)的App;
2-成功嗜逻,會(huì)返回Deployment Key涩僻。
3-所有新的Apps自動(dòng)會(huì)出現(xiàn)2個(gè)部署環(huán)境:staging代表開發(fā)版的熱更新部署,用于測試更新;production代表生產(chǎn)版的逆日。
4-在ios中嵌巷,將staging的key復(fù)制在info.plist的CodePushDeploymentKey值中
在android中,復(fù)制在Application的getPackages的CodePush構(gòu)造中室抽。
ps:你可以通過code-push deployment ls <app_name> -k命令來查看deployment key搪哪。
我們可以輸入如下命令來查看我們剛剛添加的App
$ code-push app list
二、RN代碼中集成CodePush的SDK
1.在根目錄(項(xiàng)目目錄)執(zhí)行安裝集成的組件react-native-code-push
react-native link react-native-code-push
至此Code Push for Android的SDK已經(jīng)集成完成晓折。
2.在android中配置參數(shù)
在 android/app/build.gradle文件里面添如下代碼:
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
然后在/android/settings.gradle中添加如下代碼:
include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')
3.運(yùn)行 code-push deployment -k ls <appName>獲取 部署秘鑰。默認(rèn)的部署名是 staging兽泄,所以 部署秘鑰(deployment key ) 就是 staging漓概。
code-push deployment -k ls smallred
如果之前的都配置正確,那這里可以看到Production與Staging的Deployment Key,
將這兩個(gè)key粘貼下來.如果環(huán)境來決定需要用到哪個(gè)key.
在剛開始,肯定需要測試,
那就將Staging對應(yīng)的Deployment Key,替換到下面deployment-key-here的代碼中.
地址:http://www.reibang.com/p/87ccfb795635
4.添加配置。當(dāng)APP啟動(dòng)時(shí)我們需要讓app向CodePush咨詢JS bundle的所在位置病梢,這樣CodePush就可以控制版本胃珍。更新 MainApplication.java文件:
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
protected List<ReactPackage> getPackages() {
// 3. Instantiate an instance of the CodePush runtime and add it to the list of
// existing packages, specifying the right deployment key. If you don't already
// have it, you can run "code-push deployment ls <appName> -k" to retrieve your key.
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new CodePush("atxxx57", MainApplication.this, BuildConfig.DEBUG),
//new CodePush("deployment-key-here", MainApplication.this, BuildConfig.DEBUG)
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}
關(guān)于deployment-key的設(shè)置
在上述代碼中我們在創(chuàng)建CodePush實(shí)例的時(shí)候需要設(shè)置一個(gè)deployment-key,因?yàn)閐eployment-key分生產(chǎn)環(huán)境與測試環(huán)境兩種,所以建議大家在build.gradle中進(jìn)行設(shè)置。在build.gradle中的設(shè)置方法如下:
打開android/app/build.gradle文件,找到android { buildTypes {} }然后添加如下代碼即可:
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}
releaseStaging {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'
...
}
release {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'
...
}
}
...
}
心得:另外,我們也可以將deployment-key存放在local.properties中:
code_push_key_production=Fhxxx57
code_push_key_staging=atxxx57
然后在就可以在android/app/build.gradle可以通過下面方式來引用它了:
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}
releaseStaging {
...
buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_production")+'"'
...
}
release {
...
buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_staging")+'"'
...
}
}
...
}
在android/app/build.gradle設(shè)置好deployment-key之后呢,我們就可以這樣使用了:
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
...
new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG), // Add/change this line.
...
);
}
5.修改versionName蜓陌。
在 android/app/build.gradle中有個(gè) android.defaultConfig.versionName屬性堂鲜,我們需要把 應(yīng)用版本改成 1.0.0(默認(rèn)是1.0,但是codepush需要三位數(shù))护奈。
android{
defaultConfig{
versionName "1.0.0"
}
}
詳細(xì)的操作在官網(wǎng)demo示例中:
https://github.com/Microsoft/react-native-code-push/blob/master/Examples/CodePushDemoApp/App.js
三。配置Android平臺(tái)《發(fā)布更新》
7哥纫、發(fā)布更新RN的bundle到微軟服務(wù)器
CodePush支持兩種發(fā)布更新的方式:
一是通過code-push release-react簡化方式霉旗,
二是通過code-push release的復(fù)雜方式。
一簡化方式蛀骇、命令格式:
code-push release-react <appName> <platform>
如eg:
code-push release-react smallred ios
code-push release-react smallred android
code-push release-react smallred ios --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true
code-push release-react smallred android --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true
[--bundleName <bundleName>] 指明生成JS Bundle的文件名
[--deploymentName <deploymentName>] 部署環(huán)境名:Staging(臨時(shí)環(huán)境)厌秒、Production(生產(chǎn)環(huán)境)
[--description <description>] 更新內(nèi)容描述
[--development <development>] 指明是否要生成一個(gè)非最小化,開發(fā)的JS bundle文件擅憔。默認(rèn)是false鸵闪,禁用警告提示并且bundle文件是最小化的。
[--disabled <disabled>] 指明一個(gè)版本更新是否可以被用戶下載暑诸。如果沒有指定蚌讼,版本更新是有效的(如:用戶將要下載的那一刻你的應(yīng)用稱為同步
)。如果你想發(fā)布一個(gè)更新但不是立即生效个榕,那么這個(gè)參數(shù)是有價(jià)值的篡石,直到你明確用[補(bǔ)丁]發(fā)布,當(dāng)你要讓用戶能夠下載(如:公告博客上線)西采。
[--entryFile <entryFile>] 指明相對應(yīng)用根目錄的路徑入口JavaScript 文件凰萨。
[--mandatory] 更新是否強(qiáng)制性(true、false)
[--sourcemapOutput <sourcemapOutput>] 指明生成的JS bundle 的sourcemap寫入的相對路徑。如果沒有指定胖眷,sourcemaps文件不會(huì)生成武通。
[--targetBinaryVersion <targetBinaryVersion>] app的版本號(hào),如果沒有指定珊搀,默認(rèn)使用Info.plist中的version值
[--rollout <rolloutPercentage>]
指定可以接收這次更新的用戶百分比(在1-100的數(shù)字)如果沒有設(shè)置這個(gè)參數(shù)冶忱,它會(huì)設(shè)置為100。
二復(fù)雜方式食棕、生成bundle
發(fā)布更新之前朗和,需要先把 js打包成 bundle,如:
第一步: 在 工程目錄里面新增 bundles文件:mkdir bundles
第二步: 運(yùn)行命令打包 react-native bundle --platform 平臺(tái) --entry-file 啟動(dòng)文件 --bundle-output 打包js輸出文件 --assets-dest 資源輸出目錄 --dev 是否調(diào)試簿晓。
eg:
react-native bundle --platform android --entry-file index.js --bundle-output ./bundles/index.android.bundle --dev false
成功將返回:
Loading dependency graph, done.
bundle: Writing bundle output to: ./bundles/index.android.bundle
bundle: Done writing bundle output
Assets destination folder is not set, skipping...
需要注意的是:
忽略了資源輸出是因?yàn)?輸出資源文件后眶拉,會(huì)把bundle文件覆蓋了。
輸出的bundle文件名不叫其他憔儿,而是 index.android.bundle忆植,是因?yàn)?在debug模式下,工程讀取的bundle就是叫做 index.android.bundle谒臼。
平臺(tái)可以選擇 android 或者 ios朝刊。
發(fā)布更新
打包bundle結(jié)束后,就可以通過CodePush發(fā)布更新了蜈缤。在終端輸入
code-push release <應(yīng)用名稱> <Bundles所在目錄> <對應(yīng)的應(yīng)用版本> --deploymentName: 更新環(huán)境 --description: 更新描述 --mandatory: 是否強(qiáng)制更新
eg:
code-push release smallred ./bundles/index.android.bundle 1.1.3 --deploymentName Production --description "1.1.3支持文章緩存拾氓。" --mandatory true
code-push release smallred ./bundles/index.android.bundle 1.0.1 --deploymentName Staging --description "1.0.1支持文章緩存。" --mandatory true
成功將返回:
Successfully released an update containing the "./bundles/index.android.bundle" file to the "Production" deployment of the "smallred" app.
9底哥、查看發(fā)布的歷史記錄
在終端輸入 code-push deployment history <appName> Staging 可以看到Staging版本更新的時(shí)間咙鞍、描述等等屬性。
如eg:
code-push deployment history smallred Production
code-push deployment history smallred Staging
部署測試
在應(yīng)用創(chuàng)建時(shí),會(huì)自動(dòng)生成Staging與Production這兩個(gè)環(huán)境.
應(yīng)用在開發(fā)階段,通常都是在Staging下進(jìn)行開發(fā)的,而Production作為生產(chǎn)環(huán)境.
當(dāng)應(yīng)用在開發(fā)階段開發(fā)完畢,可使用code-push promote命令從Staging 遷移到Production中
CodePush簡介
CodePush 是微軟提供的一套提供給 React Native 和 Cordova 開發(fā)者趾徽,直接部署移動(dòng)應(yīng)用更新給用戶設(shè)備的云服務(wù)续滋。CodePush 作為一個(gè)中央倉庫,開發(fā)者可以推送更新 (JS, HTML, CSS and images)孵奶,應(yīng)用可以從客戶端 SDK 里面查詢更新疲酌。CodePush 可以讓應(yīng)用有更多的可確定性,也可以讓你直接接觸用戶群了袁。在修復(fù)一些小問題和添加新特性的時(shí)候朗恳,不需要經(jīng)過二進(jìn)制打包,可以直接推送代碼進(jìn)行實(shí)時(shí)更新早像。
關(guān)于熱更新
React Native 官方并沒有提供熱更新的技術(shù)方案僻肖,但是它是支持熱更新的。
React Native 中的熱更新有點(diǎn)像 App 的版本更新卢鹦,也就是根據(jù)查詢 server 端的版本和手機(jī)端目前 App 的版本進(jìn)行對比臀脏,然后來執(zhí)行是否更新的操作劝堪。
根本原因在于 React Native 的加載啟動(dòng)機(jī)制:React Native 會(huì)將一系列資源打包成js bundle文件,系統(tǒng)加載js bundle文件揉稚,解析并渲染秒啦。所以,React Native熱更新的根本原理就是更換js bundle文件搀玖,并重新加載余境,新的內(nèi)容就完美的展示出來了。
一灌诅。CodePush熱更新組件詳細(xì)接入教程《安裝和RN集成》
1芳来、安裝 CodePush CLI
code-push register
這將會(huì)啟動(dòng)瀏覽器猜拾,要求驗(yàn)證Github或微軟帳號(hào)即舌。一旦驗(yàn)證成功,它將創(chuàng)建一個(gè)CodePush帳號(hào)跟你的Github或MSA相連挎袜,并生成一個(gè)訪問密鑰(Access Key)顽聂,然后你可以拷貝/粘貼到CLI(它會(huì)提示你這樣做)
如果沒有自動(dòng)打開瀏覽器,檢查設(shè)置默認(rèn)的瀏覽器
3盯仪、//熱更新平臺(tái)的賬號(hào)信息
register info code-push for android
github username: xmfengwankeji
password: fengwan777
4紊搪、驗(yàn)證我的登錄是否成功
$ code-push login
5、在CodePush服務(wù)器注冊App(不同平臺(tái)使用不同的名字)
添加Android平臺(tái)應(yīng)用;smallred是你app_name
code-push app add <appName> <os> <platform>
如:
$ code-push app add smallred Android react-native
│ Name │ Deployment Key │
│ Production │ FhW9iTw89LOuCywielf8Z9AV_8o-e4b0d9e2-373f-4966-a7e5-a158ec8b9b57 │
│ Staging │ ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57 │
1-如果你的App既有iOS又有Android全景,請為不同平臺(tái)創(chuàng)建單獨(dú)的App耀石;
2-成功,會(huì)返回Deployment Key爸黄。
3-所有新的Apps自動(dòng)會(huì)出現(xiàn)2個(gè)部署環(huán)境:staging代表開發(fā)版的熱更新部署娶牌,用于測試更新;production代表生產(chǎn)版的馆纳。
4-在ios中,將staging的key復(fù)制在info.plist的CodePushDeploymentKey值中
在android中汹桦,復(fù)制在Application的getPackages的CodePush構(gòu)造中鲁驶。
ps:你可以通過code-push deployment ls <app_name> -k命令來查看deployment key。
我們可以輸入如下命令來查看我們剛剛添加的App
$ code-push app list
二舞骆、RN代碼中集成CodePush的SDK
1.在根目錄(項(xiàng)目目錄)執(zhí)行安裝集成的組件react-native-code-push
react-native link react-native-code-push
至此Code Push for Android的SDK已經(jīng)集成完成。
2.在android中配置參數(shù)
在 android/app/build.gradle文件里面添如下代碼:
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
然后在/android/settings.gradle中添加如下代碼:
include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')
3.運(yùn)行 code-push deployment -k ls <appName>獲取 部署秘鑰督禽。默認(rèn)的部署名是 staging脆霎,所以 部署秘鑰(deployment key ) 就是 staging。
code-push deployment -k ls smallred
如果之前的都配置正確,那這里可以看到Production與Staging的Deployment Key,
將這兩個(gè)key粘貼下來.如果環(huán)境來決定需要用到哪個(gè)key.
在剛開始,肯定需要測試,
那就將Staging對應(yīng)的Deployment Key,替換到下面deployment-key-here的代碼中.
地址:http://www.reibang.com/p/87ccfb795635
4.添加配置狈惫。當(dāng)APP啟動(dòng)時(shí)我們需要讓app向CodePush咨詢JS bundle的所在位置睛蛛,這樣CodePush就可以控制版本。更新 MainApplication.java文件:
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
protected List<ReactPackage> getPackages() {
// 3. Instantiate an instance of the CodePush runtime and add it to the list of
// existing packages, specifying the right deployment key. If you don't already
// have it, you can run "code-push deployment ls <appName> -k" to retrieve your key.
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new CodePush("ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57", MainApplication.this, BuildConfig.DEBUG),
//new CodePush("deployment-key-here", MainApplication.this, BuildConfig.DEBUG)
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}
關(guān)于deployment-key的設(shè)置
在上述代碼中我們在創(chuàng)建CodePush實(shí)例的時(shí)候需要設(shè)置一個(gè)deployment-key,因?yàn)閐eployment-key分生產(chǎn)環(huán)境與測試環(huán)境兩種,所以建議大家在build.gradle中進(jìn)行設(shè)置。在build.gradle中的設(shè)置方法如下:
打開android/app/build.gradle文件,找到android { buildTypes {} }然后添加如下代碼即可:
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}
releaseStaging {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'
...
}
release {
...
buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'
...
}
}
...
}
心得:另外,我們也可以將deployment-key存放在local.properties中:
code_push_key_production=FhW9iTw89LOuCywielf8Z9AV_8o-e4b0d9e2-373f-4966-a7e5-a158ec8b9b57
code_push_key_staging=ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57
然后在就可以在android/app/build.gradle可以通過下面方式來引用它了:
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android {
...
buildTypes {
debug {
...
// CodePush updates should not be tested in Debug mode
...
}
releaseStaging {
...
buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_production")+'"'
...
}
release {
...
buildConfigField "String", "CODEPUSH_KEY", '"'+properties.getProperty("code_push_key_staging")+'"'
...
}
}
...
}
在android/app/build.gradle設(shè)置好deployment-key之后呢,我們就可以這樣使用了:
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
...
new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG), // Add/change this line.
...
);
}
5.修改versionName忆肾。
在 android/app/build.gradle中有個(gè) android.defaultConfig.versionName屬性荸频,我們需要把 應(yīng)用版本改成 1.0.0(默認(rèn)是1.0,但是codepush需要三位數(shù))客冈。
android{
defaultConfig{
versionName "1.0.0"
}
}
詳細(xì)的操作在官網(wǎng)demo示例中:
https://github.com/Microsoft/react-native-code-push/blob/master/Examples/CodePushDemoApp/App.js
三旭从。配置Android平臺(tái)《發(fā)布更新》
7、發(fā)布更新RN的bundle到微軟服務(wù)器
CodePush支持兩種發(fā)布更新的方式:
一是通過code-push release-react簡化方式场仲,
二是通過code-push release的復(fù)雜方式和悦。
一簡化方式、命令格式:
code-push release-react <appName> <platform>
如eg:
code-push release-react smallred ios
code-push release-react smallred android
code-push release-react smallred ios --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true
code-push release-react smallred android --t 1.0.0 --dev false --d Production --des "1.優(yōu)化操作流程" --m true
[--bundleName <bundleName>] 指明生成JS Bundle的文件名
[--deploymentName <deploymentName>] 部署環(huán)境名:Staging(臨時(shí)環(huán)境)渠缕、Production(生產(chǎn)環(huán)境)
[--description <description>] 更新內(nèi)容描述
[--development <development>] 指明是否要生成一個(gè)非最小化鸽素,開發(fā)的JS bundle文件。默認(rèn)是false褐健,禁用警告提示并且bundle文件是最小化的付鹿。
[--disabled <disabled>] 指明一個(gè)版本更新是否可以被用戶下載。如果沒有指定蚜迅,版本更新是有效的(如:用戶將要下載的那一刻你的應(yīng)用稱為同步
)舵匾。如果你想發(fā)布一個(gè)更新但不是立即生效,那么這個(gè)參數(shù)是有價(jià)值的谁不,直到你明確用[補(bǔ)丁]發(fā)布坐梯,當(dāng)你要讓用戶能夠下載(如:公告博客上線)。
[--entryFile <entryFile>] 指明相對應(yīng)用根目錄的路徑入口JavaScript 文件刹帕。
[--mandatory] 更新是否強(qiáng)制性(true吵血、false)
[--sourcemapOutput <sourcemapOutput>] 指明生成的JS bundle 的sourcemap寫入的相對路徑。如果沒有指定偷溺,sourcemaps文件不會(huì)生成蹋辅。
[--targetBinaryVersion <targetBinaryVersion>] app的版本號(hào),如果沒有指定挫掏,默認(rèn)使用Info.plist中的version值
[--rollout <rolloutPercentage>]
指定可以接收這次更新的用戶百分比(在1-100的數(shù)字)如果沒有設(shè)置這個(gè)參數(shù)侦另,它會(huì)設(shè)置為100。
二復(fù)雜方式尉共、生成bundle
發(fā)布更新之前褒傅,需要先把 js打包成 bundle,如:
第一步: 在 工程目錄里面新增 bundles文件:mkdir bundles
第二步: 運(yùn)行命令打包 react-native bundle --platform 平臺(tái) --entry-file 啟動(dòng)文件 --bundle-output 打包js輸出文件 --assets-dest 資源輸出目錄 --dev 是否調(diào)試袄友。
eg:
react-native bundle --platform android --entry-file index.js --bundle-output ./bundles/index.android.bundle --dev false
成功將返回:
Loading dependency graph, done.
bundle: Writing bundle output to: ./bundles/index.android.bundle
bundle: Done writing bundle output
Assets destination folder is not set, skipping...
需要注意的是:
忽略了資源輸出是因?yàn)?輸出資源文件后殿托,會(huì)把bundle文件覆蓋了。
輸出的bundle文件名不叫其他剧蚣,而是 index.android.bundle支竹,是因?yàn)?在debug模式下旋廷,工程讀取的bundle就是叫做 index.android.bundle。
平臺(tái)可以選擇 android 或者 ios唾戚。
發(fā)布更新
打包bundle結(jié)束后柳洋,就可以通過CodePush發(fā)布更新了。在終端輸入
code-push release <應(yīng)用名稱> <Bundles所在目錄> <對應(yīng)的應(yīng)用版本> --deploymentName: 更新環(huán)境 --description: 更新描述 --mandatory: 是否強(qiáng)制更新
eg:
code-push release smallred ./bundles/index.android.bundle 1.1.3 --deploymentName Production --description "1.1.3支持文章緩存叹坦。" --mandatory true
code-push release smallred ./bundles/index.android.bundle 1.0.1 --deploymentName Staging --description "1.0.1支持文章緩存熊镣。" --mandatory true
成功將返回:
Successfully released an update containing the "./bundles/index.android.bundle" file to the "Production" deployment of the "smallred" app.
9、查看發(fā)布的歷史記錄
在終端輸入 code-push deployment history <appName> Staging 可以看到Staging版本更新的時(shí)間募书、描述等等屬性绪囱。
如eg:
code-push deployment history smallred Production
code-push deployment history smallred Staging
部署測試
在應(yīng)用創(chuàng)建時(shí),會(huì)自動(dòng)生成Staging與Production這兩個(gè)環(huán)境.
應(yīng)用在開發(fā)階段,通常都是在Staging下進(jìn)行開發(fā)的,而Production作為生產(chǎn)環(huán)境.
當(dāng)應(yīng)用在開發(fā)階段開發(fā)完畢,可使用code-push promote命令從Staging 遷移到Production中