https://github.com/shm-open/code-push-server/blob/master/README.cn.md
https://github.com/Microsoft/react-native-code-push
依賴
本地需要安裝nodejs
安裝cli
npm install -g @shm-open/code-push-cli
確認(rèn)安裝結(jié)果
code-push -v
我本地安裝成功后的版本為2.6.1
創(chuàng)建賬號
服務(wù)賬號和密碼
- https://code-push-server-feature.***.com/ admin YYHHwO9oNULsnU3m0Lpi
code-push register https://code-push-server-feature.***.com/
此時瀏覽器會自動打開生成token的頁面妻熊,同時終端會提示需要你輸入token秀又。
在網(wǎng)頁內(nèi)點擊獲取token载迄,然后點擊生成token栈妆,即可拿到token的值挽霉。
點擊獲取token按鈕,生成token
然后把token復(fù)制下來惜傲,粘貼到終端里
敲擊回車鍵妥凳,既可以看到登陸成功的提示。
身份認(rèn)證
如果是剛剛操作完register锌杀,并輸入了token甩栈。即表示身份認(rèn)證成功「庠伲可略過此步驟量没。
如果長時間未操作,不確定是否需要認(rèn)證亿鲜≡黍冢可以通過一些方法判斷是否需要認(rèn)證.
當(dāng)你從CLI登錄后,你的訪問密鑰(Access Key)就一直保存在你本地磁盤上蒿柳,所以不必每次使用帳號都需要登錄
查詢是否已登錄
可以在任何時候饶套,通過下面的命令,確認(rèn)本地是否已經(jīng)登錄
code-push whoami
如果顯示郵箱地址垒探,表示已登錄妓蛮。否則會提示當(dāng)前未登錄。
登錄
code-push login https://code-push-server-feature.***.com/
這個命令也會打開瀏覽器圾叼,然后去生成token蛤克,然后把token復(fù)制粘貼到終端里。和register命令行為差不多
退出登錄
code-push logout
主動退出登錄
查看已登錄賬號列表
code-push access-key ls
刪除某個賬號
code-push access-key rm <accessKey>
登錄多個賬號
創(chuàng)建一個賬號
如果你需要其他賬號夷蚊,也可以新建一個其他的賬號
code-push access-key add "VSTS Integration"
通過上面的命令可以生成一個新的token
登錄其他賬號
然后登錄一下
code-push login --accessKey <accessKey>
應(yīng)用管理
每一個熱更新的頁面构挤,都需要在熱更新服務(wù)里創(chuàng)建對應(yīng)的應(yīng)用。
同一個頁面惕鼓,需要分別創(chuàng)建Android和iOS的應(yīng)用筋现,不可以使用同一個。
應(yīng)用創(chuàng)建
code-push app add <appName> <os> <platform>
appName: 應(yīng)用名稱
os: 操作系統(tǒng)
platform: 支持react-native和cordova箱歧。 cordova暫時用不到
創(chuàng)建應(yīng)用的時候矾飞,推薦通過不同的后綴區(qū)分對應(yīng)的系統(tǒng)
所有新的Apps自動會出現(xiàn)兩個部署環(huán)境(Staging
和Production
)
示例:
code-push app add MyApp-Android android react-native
code-push app add MyApp-iOS ios react-native
查詢某個app的Deployment key
code-push deployment ls <appName> -k
示例:
應(yīng)用重命名
code-push app rename <appName> <newAppName>
示例:
應(yīng)用刪除
code-push app rm <appName>
示例:
應(yīng)用合作
可以將自己賬號下的某一個應(yīng)用的操作權(quán)限,分配給其他賬號呀邢,一起合作管理應(yīng)用
code-push collaborator add <appName> <collaboratorEmail>
這里需要別人提供一個已注冊的賬號
一旦添加了洒沦,所有的合作者將立即擁有了最新分享App的如下權(quán)限:
查看App,它的合作者价淌,<u>部署管理</u>和<u>查看發(fā)布?xì)v史</u>申眼。
<u>發(fā)布</u>更新到任何應(yīng)用的部署環(huán)境瞒津。
<u>促進(jìn)</u>更新在任何應(yīng)用部署環(huán)境之間。
<u>回滾</u>任何應(yīng)用部署豺型。
<u>打補(bǔ)丁</u>在任何應(yīng)用部署里仲智。
相反的,這就意味著一個合作者不能做任何如下的事情:
重命名或刪除應(yīng)用姻氨。
轉(zhuǎn)讓應(yīng)用的所有權(quán)。
創(chuàng)建剪验,重命名或刪除新的部署環(huán)境肴焊。
清除一個部署歷史。
添加或刪除合作者功戚。
一個合作的開發(fā)者可以移除他/她自己
解除合作者關(guān)系
code-push collaborator rm <appName> <collaboratorEmail>
列出應(yīng)用的所有合作者
code-push collaborator ls <appName>
轉(zhuǎn)讓給其他開發(fā)者
code-push app transfer <appName> <newOwnerEmail>
部署管理
打包
發(fā)布更新
code-push release MyApp-iOS /Users/***/Documents/***/demos/AwesomeProject/bundles 1.0.0
code-push release <應(yīng)用名稱> <Bundles所在目錄> <對應(yīng)的應(yīng)用版本> --deploymentName: 更新環(huán)境 --description: 更新描述 --mandatory: 是否強(qiáng)制更新
注意:
CodePush默認(rèn)是更新 staging 環(huán)境的娶眷,如果是staging,則不需要填寫 deploymentName啸臀。
如果有 mandatory 則Code Push會根據(jù)mandatory 是true或false來控制應(yīng)用是否強(qiáng)制更新届宠。默認(rèn)情況下mandatory為false即不強(qiáng)制更新。
對應(yīng)的應(yīng)用版本(targetBinaryVersion)是指當(dāng)前app的版本(對應(yīng)build.gradle中設(shè)置的versionName "1.0.6")乘粒,也就是說此次更新的js/images對應(yīng)的是app的那個版本豌注。不要將其理解為這次js更新的版本。 如客戶端版本是 1.0.6灯萍,那么我們對1.0.6的客戶端更新js/images轧铁,targetBinaryVersion填的就是1.0.6。
對于對某個應(yīng)用版本進(jìn)行多次更新的情況旦棉,CodePush會檢查每次上傳的 bundle齿风,如果在該版本下如1.0.6已經(jīng)存在與這次上傳完全一樣的bundle(對應(yīng)一個版本有兩個bundle的md5完全一樣),那么CodePush會拒絕此次更新绑洛。 如圖:
- 所以如果我們要對某一個應(yīng)用版本進(jìn)行多次更新救斑,只需要上傳與上次不同的bundle/images即可。如: eg: 對1.0.6的版本進(jìn)行第一次更新:
code-push release GitHubPopular ./bundles/index.android.bundle 1.0.6 --deploymentName Production --description "1.支持文章緩存真屯。" --mandatory true
對1.0.6的版本進(jìn)行第二次更新:code-push release GitHubPopular ./bundles/index.android.bundle 1.0.6 --deploymentName Production --description "1.新添加收藏功能脸候。" --mandatory true
在終端輸入code-push deployment history <appName> Staging
可以看到Staging版本更新的時間、描述等等屬性讨跟。 eg:code-push release Equipment ./bundles 1.0.1
app版本號的填寫說明
發(fā)布更新&打包
code-push release-react MyApp-iOS ios
Code-push release-react <appName> <platform>
執(zhí)行該命令,會自動打包切上傳
這里可能可能會有個目錄結(jié)構(gòu)的問題纪他,執(zhí)行過程中會自動檢測ios/文件下的內(nèi)容,可能會因為目錄問題報錯