RNCodePush熱更新組件詳細(xì)接入教程

CodePush簡(jiǎn)介

CodePush 是微軟提供的一套提供給 React Native 和 Cordova 開發(fā)者,直接部署移動(dòng)應(yīng)用更新給用戶設(shè)備的云服務(wù)。CodePush 作為一個(gè)中央倉(cāng)庫(kù),開發(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)行對(duì)比,然后來執(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
npm install -g code-push-cli 2、注冊(cè) CodePush賬號(hào) 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ù)器注冊(cè)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,請(qǐng)為不同平臺(tái)創(chuàng)建單獨(dú)的App;

2-成功,會(huì)返回Deployment Key。

3-所有新的Apps自動(dòng)會(huì)出現(xiàn)2個(gè)部署環(huán)境:staging代表開發(fā)版的熱更新部署,用于測(cè)試更新;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
npm install react-native-code-push --save 安裝完后,link連接,將Staging中的Deployment Key輸入:atxxx57 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.
在剛開始,肯定需要測(cè)試,
那就將Staging對(duì)應(yīng)的Deployment Key,替換到下面deployment-key-here的代碼中.
地址:http://www.itdecent.cn/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è)置

在上述代碼中我們?cè)趧?chuàng)建CodePush實(shí)例的時(shí)候需要設(shè)置一個(gè)deployment-key,因?yàn)閐eployment-key分生產(chǎn)環(huán)境與測(cè)試環(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簡(jiǎn)化方式,
二是通過code-push release的復(fù)雜方式。

一簡(jiǎn)化方式、命令格式:
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>] 指明相對(duì)應(yīng)用根目錄的路徑入口JavaScript 文件。
[--mandatory] 更新是否強(qiáng)制性(true、false)
[--sourcemapOutput <sourcemapOutput>] 指明生成的JS bundle 的sourcemap寫入的相對(duì)路徑。如果沒有指定,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所在目錄> <對(duì)應(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

部署測(cè)試

在應(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簡(jiǎn)介

CodePush 是微軟提供的一套提供給 React Native 和 Cordova 開發(fā)者,直接部署移動(dòng)應(yīng)用更新給用戶設(shè)備的云服務(wù)。CodePush 作為一個(gè)中央倉(cāng)庫(kù),開發(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)行對(duì)比,然后來執(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
npm install -g code-push-cli 2、注冊(cè) CodePush賬號(hào) 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ù)器注冊(cè)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,請(qǐng)為不同平臺(tái)創(chuàng)建單獨(dú)的App;

2-成功,會(huì)返回Deployment Key。

3-所有新的Apps自動(dòng)會(huì)出現(xiàn)2個(gè)部署環(huán)境:staging代表開發(fā)版的熱更新部署,用于測(cè)試更新;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
npm install react-native-code-push --save 安裝完后,link連接,將Staging中的Deployment Key輸入:ataVr8Yk2HYxxlS29OUm_SFejDxHe4b0d9e2-373f-4966-a7e5-a158ec8b9b57 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.
在剛開始,肯定需要測(cè)試,
那就將Staging對(duì)應(yīng)的Deployment Key,替換到下面deployment-key-here的代碼中.
地址:http://www.itdecent.cn/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è)置

在上述代碼中我們?cè)趧?chuàng)建CodePush實(shí)例的時(shí)候需要設(shè)置一個(gè)deployment-key,因?yàn)閐eployment-key分生產(chǎn)環(huán)境與測(cè)試環(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簡(jiǎn)化方式,
二是通過code-push release的復(fù)雜方式。

一簡(jiǎn)化方式、命令格式:
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>] 指明相對(duì)應(yīng)用根目錄的路徑入口JavaScript 文件。
[--mandatory] 更新是否強(qiáng)制性(true、false)
[--sourcemapOutput <sourcemapOutput>] 指明生成的JS bundle 的sourcemap寫入的相對(duì)路徑。如果沒有指定,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所在目錄> <對(duì)應(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

部署測(cè)試

在應(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中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容