React Native升級(jí)指南|v0.40+升級(jí)適配經(jīng)驗(yàn)與心得

告訴大家一個(gè)好消息秕狰,為大家精心準(zhǔn)備的React Native視頻教程發(fā)布了帘皿,大家現(xiàn)可以看視頻學(xué)React Native了东跪。

React Native作為一個(gè)有上千開(kāi)發(fā)者參與的開(kāi)源項(xiàng)目,自從2015年3月27日第一版發(fā)布以來(lái)到現(xiàn)在已經(jīng)有147次版本發(fā)布了鹰溜,平均起來(lái)幾乎每周都會(huì)有新的版本發(fā)布虽填。隨著一次次版本的迭代,React Native也逐漸穩(wěn)定曹动,版本發(fā)布頻率保持在了每一到兩周一次斋日。新版本不停的迭代對(duì)于React Native開(kāi)發(fā)者來(lái)說(shuō),及時(shí)升級(jí)React Native版本讓項(xiàng)目能夠使用更多的API仁期、新特性以及淘汰掉一些老的API桑驱,不僅成為了一門必修課也是一個(gè)不小的挑戰(zhàn)。

React Native參與者

升級(jí)一個(gè)React Native項(xiàng)目不僅需要JS部分還牽扯到Android項(xiàng)目和iOS項(xiàng)目跛蛋,盡管React Native官方極力降低升級(jí)的繁瑣熬的,但如果兩個(gè)React Native版本跨度較大的話升級(jí)起來(lái)還是需要不少工作量的。在這篇文章中我將向大家分享React Native升級(jí)的流程指南以及我在升級(jí)React Native過(guò)程中的一些經(jīng)驗(yàn)心得赊级。

React Native升級(jí)流程

React Native升級(jí)流程可分為三大步:

  1. 安裝react-native-git-upgrade 模塊押框;
  2. 執(zhí)行更新命令;
  3. 解決沖突理逊;

心得:上述步驟都依賴于Git,沒(méi)有安裝Git客戶端的小伙伴橡伞,需要安裝一下。

1.安裝react-native-git-upgrade 模塊

首先我們需要安裝react-native-git-upgrade 模塊晋被,打開(kāi)終端執(zhí)行下面命名即可:

$ npm install -g react-native-git-upgrade

安裝成功后兑徘,會(huì)看到下圖輸出:


react-native-git-upgrade

心得:react-native-git-upgrade是一個(gè)命令行界面的工具,我們需要將它安裝到全局羡洛,所以通過(guò)npm install命令安裝的時(shí)候需要加上-g這個(gè)參數(shù)挂脑。

2.執(zhí)行更新命令

安裝過(guò)react-native-git-upgrade工具之后,我們就可以通過(guò)它來(lái)更新我們項(xiàng)目的React Native版本了,通過(guò)運(yùn)行下面命令即可完成更新:

$ react-native-git-upgrade

通過(guò)這個(gè)命令可以將React Native更新到最新的版本崭闲,但不是預(yù)發(fā)布版哦肋联。

心得:我們需要在React Native項(xiàng)目的根目錄下執(zhí)行更新命令,也就是package.json所在的目錄刁俭。

如果想更新到指定版本的React Native則需要在上述命令后加上指定版本的參數(shù)橄仍,如下:

$ react-native-git-upgrade X.Y.Z

這樣以來(lái),React Native便會(huì)被更新到X.Y.Z版牍戚,在運(yùn)行這個(gè)命令時(shí)侮繁,需要將X.Y.Z替換成具體的版本。

更新命令執(zhí)行成功之后翘魄,你會(huì)從終端看到如下輸出:

react-native-git-upgrade

從終端的輸出中我們可以看出斋射,更新的全過(guò)程以及我們所更新到的React Native版本腹躁。

另外,我們通過(guò)Version Control可以看出此次更新后發(fā)生變化的文件:

升級(jí)后發(fā)生改變的文件

3.解決沖突

需要特別提到的是react-native-git-upgrade工具在更新React Native版本的時(shí)候會(huì)進(jìn)行一個(gè)合并操作炕淮,也就是將我們本地的React Native版本和最新或指定的React Native版本進(jìn)行合并们镜,在合并過(guò)程中可能會(huì)產(chǎn)生一些沖突,在終端的輸出中我們能清晰的看出發(fā)生沖突的文件:

react-native-git-upgrade-conflicts

從上圖中我們可以看到AppDelegate.m與project.pbxproj發(fā)生了沖突反砌,所以接下來(lái)我們需要處理發(fā)生沖突的文件晶疼。

AppDelegate.m

心得:一般來(lái)說(shuō)寒匙,React Native版本跨度越大考蕾,產(chǎn)生沖突的可能性也就越大。

在處理沖突的時(shí)候通常我們會(huì)保留最新的代碼移除老的代碼,但具體還是要看了代碼的具體功能后在做處理,比如,在上圖中我們需要移除#import "RCTBundleURLProvider.h"#import "RCTRootView.h"保留#import <React/RCTBundleURLProvider.h>#import <React/RCTRootView.h>以及#import "SplashScreen.h",為什么要保留#import "SplashScreen.h"呢态辛,這是因?yàn)椋?code>#import "SplashScreen.h"是我們添加的,并不屬于React Native的一部分挺尿。

心得:另外一個(gè)需要特別提到的就是xxx.xcodeproj文件夾下所產(chǎn)生的沖突文件了奏黑,比如project.pbxproj炊邦,xxx.xcodeproj文件夾下存放的是整個(gè)iOS項(xiàng)目的一些配置文件,在處理這些文件沖突的時(shí)候我們需要特別注意文件的格式熟史,處理不當(dāng)很有可能導(dǎo)致真?zhèn)€iOS項(xiàng)目無(wú)法打開(kāi)馁害。

當(dāng)處理完沖突后如果在打開(kāi)iOS項(xiàng)目時(shí)出現(xiàn)the project file cannot be parsed錯(cuò)誤:

the project file cannot be parsed

則很可能是在處理xxx.xcodeproj文件夾下的沖突的時(shí)候破壞了文件的結(jié)構(gòu),導(dǎo)致XCode無(wú)法解析相應(yīng)文件蹂匹,要解決這個(gè)問(wèn)題則需要找到出現(xiàn)問(wèn)題的文件將被破壞的文件結(jié)構(gòu)修復(fù)好碘菜。

到這里整個(gè)更新流程便走完了,現(xiàn)在我們便可以使用以及體驗(yàn)React Native最新版本的API以及特性了限寞。

心得:雖然我們完成了React Native的整個(gè)更新流程忍啸,但我們這個(gè)時(shí)候還需要運(yùn)行一下我們的React Native項(xiàng)目,然后看一下各個(gè)功能是否正常履植,因?yàn)楹苡锌赡芪覀冊(cè)陧?xiàng)目中所使用的一些舊版的API在新版的React Native中已經(jīng)被移除了计雌,所以我們需要及時(shí)的更新被移除或被棄用的API。關(guān)于每一個(gè)版本所發(fā)生的具體變化我們可以查閱:React Native項(xiàng)目的發(fā)布說(shuō)明
玫霎。

React Native v0.40+升級(jí)適配經(jīng)驗(yàn)與心得

在2017年1月初凿滤,React Native發(fā)布了v0.40版本,并起名為December 2016鼠渺,這也是2016年的最后一個(gè)版本鸭巴。和以往一樣每次React Native整版的發(fā)布都會(huì)帶來(lái)一些大的變更,這次也不例外拦盹。在這篇文章中鹃祖,我將向大家分享React Native v0.40對(duì)開(kāi)發(fā)者影響比較大的變更以及升級(jí)到v0.40的一些經(jīng)驗(yàn)心得。

關(guān)于如何升級(jí)React Native項(xiàng)目普舆,可參考[React Native升級(jí)流程](#React Native升級(jí)流程)恬口。

在昨天我對(duì)react-native-splash-screen做了React Native v0.40適配,并按照[React Native升級(jí)流程](#React Native升級(jí)流程)的步驟沼侣,將examples的React Native版本從v0.32升級(jí)到了 v0.40祖能。在這里我會(huì)結(jié)合這次升級(jí)來(lái)講解一下React Native v0.40所帶來(lái)的一些變化。

心得:升級(jí)的過(guò)程是痛苦的蛾洛,但疼并快樂(lè)著养铸。

React Native v0.40所帶來(lái)的一些重大變化

從React Native的更新文檔我們可以看到每次版本升級(jí)所帶了的一些重大變化,在v0.40版本中也是一樣轧膘。

iOS Native部分的頭文件被移動(dòng)

在 v0.40版本中钞螟,影響最為廣泛的一個(gè)變化就是這個(gè)了,iOS Native部分的頭文件被移動(dòng)到了React下谎碍。這一變化直接導(dǎo)致所有原生模塊和有引用React Native .h文件的代碼在v0.40上無(wú)法運(yùn)行鳞滨。

在v0.40之前要導(dǎo)入一個(gè)React Native .h文件的格式是這樣的:

#import "RCTUtils.h"

在v0.40版本導(dǎo)入一個(gè)React Native .h文件則變成了這個(gè)樣子:

#import <React/RCTUtils.h>

為了解決我們需要將所有引用到了React Native .h文件的代碼改成v0.40的寫法。

可參考:AppDelegate.m

心得:不僅于此蟆淀,這一變更直接導(dǎo)致所有用到React Native .h的第三方庫(kù)在沒(méi)有做上述更改之前都無(wú)法兼容v0.40

require('image!...')引用圖片方式不在支持

require('image!...')這種使用圖片的方式已經(jīng)被啟用很久了拯啦,在v0.40版本中則直接把它移除了澡匪,也就是以后我們不能再通過(guò)這種方式來(lái)使用圖片了。更多使用圖片的方式可以參考官方文檔:Images使用

心得:無(wú)論是在做React Native開(kāi)發(fā)還是在做其他開(kāi)發(fā)褒链,一些被標(biāo)記為deprecated的API唁情,要及時(shí)的替換掉,因?yàn)樵诓痪玫膶?lái)這些被棄用的API很可能從SDK中移除碱蒙。

推薦學(xué)習(xí):視頻教程《React Native開(kāi)發(fā)跨平臺(tái)GitHub App》

最后

既然來(lái)了荠瘪,留下個(gè)喜歡再走吧,鼓勵(lì)我繼續(xù)創(chuàng)作(_)∠※

如果喜歡我的文章赛惩,那就關(guān)注我的博客@ devio.org吧,讓我們一起做朋友~~

戳這里,加關(guān)注哦:

微博:第一時(shí)間獲取推送
個(gè)人博客:干貨文章都在這里哦
GitHub:我的開(kāi)源項(xiàng)目

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趁餐,一起剝皮案震驚了整個(gè)濱河市喷兼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌后雷,老刑警劉巖季惯,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異臀突,居然都是意外死亡勉抓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門候学,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)藕筋,“玉大人,你說(shuō)我怎么就攤上這事梳码∫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵掰茶,是天一觀的道長(zhǎng)暇藏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)濒蒋,這世上最難降的妖魔是什么盐碱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮沪伙,結(jié)果婚禮上瓮顽,老公的妹妹穿的比我還像新娘。我一直安慰自己焰坪,他們只是感情好趣倾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著某饰,像睡著了一般儒恋。 火紅的嫁衣襯著肌膚如雪善绎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天诫尽,我揣著相機(jī)與錄音禀酱,去河邊找鬼。 笑死牧嫉,一個(gè)胖子當(dāng)著我的面吹牛剂跟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酣藻,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼曹洽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辽剧?” 一聲冷哼從身側(cè)響起送淆,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怕轿,沒(méi)想到半個(gè)月后偷崩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撞羽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年阐斜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诀紊。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谒出,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渡紫,到底是詐尸還是另有隱情到推,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布惕澎,位于F島的核電站莉测,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏唧喉。R本人自食惡果不足惜捣卤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望八孝。 院中可真熱鬧董朝,春花似錦、人聲如沸干跛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)楼入。三九已至哥捕,卻和暖如春牧抽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遥赚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工扬舒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凫佛。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓讲坎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親愧薛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晨炕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,727評(píng)論 25 707
  • 英語(yǔ)太爛,菜鳥(niǎo)水平毫炉,如有不妥之處府瞄,請(qǐng)各位大神指正 工作原理 React Native應(yīng)用程序由JavaScript...
    Juice_gg閱讀 3,729評(píng)論 0 4
  • 坐在兩萬(wàn)英尺的高空 看云海姿意 心卻忽然回到N年前想你時(shí)青澀的模樣 用美麗的眼睛看 用美麗的心情聽(tīng) 這個(gè)城市是如此...
    風(fēng)煙俱盡閱讀 1,302評(píng)論 1 6
  • 2011年3月,與朋友深圳出關(guān)去香港碘箍,恰逢亞洲武術(shù)節(jié),大批武林高手蜂擁過(guò)關(guān)鲸郊。導(dǎo)關(guān)小姐抱怨為何挑今天過(guò)關(guān)丰榴,我順口說(shuō)也...
    成小功閱讀 303評(píng)論 0 1
  • 昨天扒了騷浪賤的杰克船長(zhǎng)約翰尼·德普為什么辣么受歡迎四濒,今天就扒下最強(qiáng)星二代德普叔的女兒Lily Rose Depp...
    米婭C閱讀 318評(píng)論 0 0