第二章 RN環(huán)境搭建锚扎、項(xiàng)目結(jié)構(gòu)吞瞪、運(yùn)行與調(diào)試介紹

(一)Rn搭建環(huán)境

? ? ? ?最開(kāi)始肯定是要面臨系統(tǒng)的選擇,在這里不推薦windows驾孔,雖然作者不太懂ios芍秆,但是也知道選擇了windows就意味著惯疙,在后面原生與Rn結(jié)合開(kāi)發(fā)的時(shí)候放棄了IOS,你如果不嫌麻煩硬要開(kāi)個(gè)虛擬機(jī)妖啥,那另說(shuō)霉颠。我推薦macbookpro 15寸 512G,mac上有些獨(dú)有的開(kāi)發(fā)工具可以提高效率…?

備注:在這里就順便說(shuō)一下mac的幾款常用免費(fèi)開(kāi)發(fā)軟件吧:Sublime Text3(結(jié)合幾個(gè)插件如React-native-snippets荆虱、babel蒿偎,用作免費(fèi)的React Native開(kāi)發(fā)工具,有錢(qián)的可以用webstorm)怀读、Chrome (用來(lái)調(diào)試Rn)诉位,Eclipse、office套裝(這個(gè)要破解菜枷,需要資源的話(huà)可以自己搜或找我要)苍糠、Xcode(這個(gè)要在App Store里下),Android Studio啤誊、VirtualBox岳瞭,為啥要用Virtualbox是因?yàn)槲伊?xí)慣于svn的windows版小烏龜了,弄了個(gè)win7坷衍,然后共享了下目錄…一直這樣將就著;好条舔,下面正式開(kāi)始環(huán)境搭建:

1)安裝Homebrew枫耳,Mac系統(tǒng)的包管理器,用于安裝NodeJS和一些其他必需的工具軟件孟抗。(順帶一提迁杨,這玩意兒不錯(cuò),我的virtualbox就是用這個(gè)裝的凄硼,他會(huì)自動(dòng)配置環(huán)境變量铅协,而且卸載只要uninstall即可,不用害怕卸不干凈)

/usr/bin/ruby -e ?"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

在Max OSX 10.11(El Capitan)版本中摊沉,homebrew在安裝軟件時(shí)可能會(huì)碰到/usr/local目錄不可寫(xiě)的權(quán)限問(wèn)題狐史。可以使用下面的命令修復(fù): sudo chown -R `whoami` /usr/local

2)homebrew安裝好后说墨,就要開(kāi)始安裝Node.js和Watchman

Nodejs是基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境骏全,他添加了一堆系統(tǒng)級(jí)(操作文件、驅(qū)動(dòng))的API尼斧,為JS提供了服務(wù)端的開(kāi)發(fā)方案姜贡。之前有人問(wèn)過(guò)我為什么Rn開(kāi)發(fā)需要Node環(huán)境,在本章的項(xiàng)目結(jié)構(gòu)階段會(huì)詳細(xì)說(shuō)明棺棵。

Watchman是由Facebook提供的監(jiān)視文件系統(tǒng)變更的工具楼咳。安裝此工具可以提高開(kāi)發(fā)時(shí)的性能(packager可以快速捕捉文件的變化從而實(shí)現(xiàn)實(shí)時(shí)刷新)

brew install node ? ? ??

brew install watchman

備注:還有一款Flow熄捍,是一個(gè)靜態(tài)的JS類(lèi)型檢查工具,因?yàn)檎Z(yǔ)法很獨(dú)特還需要耗時(shí)間去學(xué)母怜,所以新手就不用去學(xué)了余耽,如果強(qiáng)行要用,你就裝下自己去玩吧~

brew install flow

3)xcode安裝糙申,這個(gè)就不得不說(shuō)下了宾添,Rn中文網(wǎng)上說(shuō)xcode可以是7.0以上的,但我的7.2在編譯RN中的ios項(xiàng)目時(shí)一直報(bào)錯(cuò)柜裸,錯(cuò)誤已經(jīng)忘了缕陕,就是一個(gè)東西沒(méi)有定義,刪除了以后又說(shuō)一個(gè)bgcolor沒(méi)有定義…google上各種搜疙挺,都沒(méi)有能解決的扛邑,升級(jí)xcode8又一直轉(zhuǎn)圈,沒(méi)法升級(jí)…最后是先把系統(tǒng)升級(jí)到了10.12.3 Sierra后铐然,才成功下載了xcode8蔬崩,編譯瞬間成功,可開(kāi)心了搀暑!

4)AndroidStudio環(huán)境安裝:下個(gè)jdk沥阳,在用戶(hù)的bash_profile下配環(huán)境變量,然后下個(gè)AS安裝就行了自点,可能要下一大堆sdk(沒(méi)有強(qiáng)迫癥的可以選幾個(gè)喜歡的下就行)桐罕,這個(gè)網(wǎng)上傻瓜教程一大堆,google官方的Android教程都是mac的開(kāi)發(fā)環(huán)境桂敛,弄完了創(chuàng)建個(gè)虛擬機(jī)跑個(gè)helloworld看下功炮,

備注:如果說(shuō)前面的你不翻墻還行,那這里下sdk還不翻墻你就該哭了术唬!

5)安裝Yarn薪伏、React Native的命令行工具

這里最好是翻墻,如果不翻墻安裝肯定出錯(cuò)粗仓,網(wǎng)速不穩(wěn)定的話(huà)也會(huì)出錯(cuò)嫁怀,

所以如果不翻墻的話(huà)就需要設(shè)置npm鏡像以加速后面的過(guò)程

npm config set registry https://registry.npm.taobao.org --global

npm config set disturl https://npm.taobao.org/dist --global

(備注:npm是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問(wèn)題借浊,類(lèi)似于mac的homebrew眶掌,官網(wǎng)號(hào)稱(chēng)是全球最大的開(kāi)源庫(kù)生態(tài)系統(tǒng) - -)


npm install -g yarn react-native-cli

安裝完上面的命令后,就可以使用react-native的命令了巴碗,可以init一個(gè)rn項(xiàng)目朴爬,或者進(jìn)行更新等操作。

(備注:看到EACCES: permission denied這樣的權(quán)限報(bào)錯(cuò)橡淆,那么請(qǐng)參照上文的homebrew譯注召噩,修復(fù)/usr/local目錄的所有權(quán):

sudo chown -R `whoami` /usr/local)

最后母赵,運(yùn)用 react-native init firstRNapp初始化一個(gè)Rn項(xiàng)目

(firstRNapp是項(xiàng)目名,這個(gè)初始化的時(shí)間比較長(zhǎng)具滴,如果不翻墻還沒(méi)配npm鏡像的話(huà)會(huì)出現(xiàn)報(bào)錯(cuò)凹嘲,所以這個(gè)過(guò)程出現(xiàn)的錯(cuò)誤可能是網(wǎng)絡(luò)錯(cuò)誤)


初始化成功的頁(yè)面

(二)RN項(xiàng)目結(jié)構(gòu)


初始Rn項(xiàng)目目錄

入門(mén)項(xiàng)目中有用的就這4個(gè)目錄,

①android是編譯出來(lái)的Android工程构韵,下面有我們熟悉的build.gradle,可以導(dǎo)入為As工程周蹭。

②Ios為IOS項(xiàng)目,里面有一個(gè)

雙擊可以直接將xcode啟動(dòng)疲恢,

③上面兩個(gè)目錄可以說(shuō)是Native項(xiàng)目殼子凶朗,那么index.android.js和index.ios.js就可以看成是rn項(xiàng)目的ios和Android入口,通常情況下他倆是相同的內(nèi)容显拳,入門(mén)項(xiàng)目中就是在這兩個(gè)文件中進(jìn)行頁(yè)面的開(kāi)發(fā)棚愤。

④package.json這個(gè)就關(guān)鍵了,從內(nèi)容上就可以看出他的功能應(yīng)該是類(lèi)似于Android項(xiàng)目中的build.gradle杂数,說(shuō)明了整個(gè)Rn項(xiàng)目的名稱(chēng)宛畦,版本號(hào),以及需要的依賴(lài)等等揍移。后面引入第三方組件其中一步次和,就是要在這些依賴(lài)中添加條目。


package.json

? ? ? 上面有個(gè)目錄node_modules那伐,這個(gè)目錄是node通過(guò)解析package.json 下載的相關(guān)依賴(lài)踏施。為啥說(shuō)它沒(méi)用呢,就是說(shuō)我們?cè)诳截悇e人的項(xiàng)目的時(shí)候這個(gè)是個(gè)完全不需要拷貝的目錄喧锦,我們只需要對(duì)好package.json读规,然后通過(guò)npm install命令抓督,就可以重新生成對(duì)應(yīng)的node_modules目錄燃少。

備注:其中node_modules和 package.json都是NodeJS相關(guān)的目錄

而且node有模塊化的思想(Rn有組件化的思想),我們寫(xiě)的頁(yè)面JS需要操作文件铃在, 引入我們的組件和格式各樣的配置阵具,不是像前端的引入方式,而是通過(guò)在首行import進(jìn)來(lái)定铜。

而且也可以看到阳液,我們?cè)陂_(kāi)發(fā)的過(guò)程中一直在不斷的使用node的npm包管理,去下載各種第三方依賴(lài)揣炕;所以帘皿,現(xiàn)在可以理解為什么Rn開(kāi)發(fā)會(huì)需要node的環(huán)境了么?


(三)Rn運(yùn)行與調(diào)試

1畸陡、IOS運(yùn)行

雙擊ios目錄下的

或者后綴類(lèi)似的文件

在右邊選擇一個(gè)分辨率低點(diǎn)的設(shè)備鹰溜,然后點(diǎn)左邊的三角編譯運(yùn)行

就可以看到項(xiàng)目運(yùn)行起來(lái)了虽填,

這里啟動(dòng)了一個(gè)React Packager和一個(gè)ios iPhone6的虛擬機(jī),顯示了一個(gè)Rn的歡迎界面曹动。頁(yè)面的內(nèi)容就是在之前提到過(guò)的入口index文件中編寫(xiě)的斋日。至于右邊的React Packager,這是一個(gè)微型http服務(wù)器(8081)墓陈,負(fù)責(zé)把我們所有寫(xiě)的js文件以及依賴(lài)的第三方j(luò)s打包起來(lái)恶守,發(fā)給右邊的“殼子”。

如果index.ios.js發(fā)生了改變贡必,可以通過(guò)快捷鍵cmd + R,reload js

cmd + shift +h是home鍵兔港;cmd + D調(diào)出菜單

菜單中第二個(gè)是在chrome中調(diào)試用到的,

第三個(gè)如果允許的話(huà)赊级,js改動(dòng)后押框,在殼子中會(huì)自動(dòng)reload

2、Android運(yùn)行

因?yàn)槲沂茿ndroid開(kāi)發(fā)者理逊,所以習(xí)慣性的將android下面的殼子工程導(dǎo)入到AndroidStudio中橡伞,導(dǎo)入后會(huì)加載并下載一些需要的東西,然后更新gradle晋被,

更新完gradle之后同步兑徘,還會(huì)再次報(bào)錯(cuò),然后點(diǎn)擊一下下面的Fix鏈接即可解決

因?yàn)閙ac的google原生虛擬機(jī)運(yùn)行起來(lái)十分的流暢羡洛,所以我就直接用的官網(wǎng)下的虛擬機(jī)挂脑,我用的是:

注意:ios開(kāi)啟的時(shí)候,react Packager是自動(dòng)彈出來(lái)的欲侮,如果我們之前沒(méi)有打開(kāi)react Packager崭闲,那么這樣運(yùn)行Android的殼子是無(wú)法自動(dòng)彈出的,需要我們cd到我們的Rn項(xiàng)目威蕉,然后輸入react-native start來(lái)人工開(kāi)啟服務(wù)刁俭;然后再運(yùn)行殼子。

cmd +M調(diào)出菜單韧涨,功能同ios設(shè)備上的菜單牍戚。

若想要在真機(jī)上調(diào)試,則需要在Android的配置中加ip端口虑粥,然后reload:

備注:我沒(méi)用官方的那個(gè)react-native run-android或run-ios如孝,是因?yàn)橐螺d一大堆東西,我還是習(xí)慣讓As自己來(lái)搞娩贷,選擇自己喜歡的方式啟動(dòng)即可第晰。

3、Rn開(kāi)發(fā)調(diào)試

①選擇菜單中的第二項(xiàng),會(huì)自動(dòng)彈出Chrome茁瘦,然后用cmd +option +i

打開(kāi)控制臺(tái)罗岖,然后再console中查看我們打印的日志,

②斷點(diǎn)調(diào)試位置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腹躁,一起剝皮案震驚了整個(gè)濱河市桑包,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纺非,老刑警劉巖哑了,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異烧颖,居然都是意外死亡弱左,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)炕淮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拆火,“玉大人,你說(shuō)我怎么就攤上這事涂圆∶蔷担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵润歉,是天一觀的道長(zhǎng)模狭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)踩衩,這世上最難降的妖魔是什么嚼鹉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮驱富,結(jié)果婚禮上锚赤,老公的妹妹穿的比我還像新娘。我一直安慰自己褐鸥,他們只是感情好线脚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著晶疼,像睡著了一般酒贬。 火紅的嫁衣襯著肌膚如雪又憨。 梳的紋絲不亂的頭發(fā)上翠霍,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音蠢莺,去河邊找鬼寒匙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锄弱。 我是一名探鬼主播考蕾,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼会宪!你這毒婦竟也來(lái)了肖卧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掸鹅,失蹤者是張志新(化名)和其女友劉穎塞帐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體巍沙,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葵姥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了句携。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榔幸。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖矮嫉,靈堂內(nèi)的尸體忽然破棺而出削咆,到底是詐尸還是另有隱情,我是刑警寧澤蠢笋,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布态辛,位于F島的核電站,受9級(jí)特大地震影響挺尿,放射性物質(zhì)發(fā)生泄漏奏黑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一编矾、第九天 我趴在偏房一處隱蔽的房頂上張望熟史。 院中可真熱鬧,春花似錦窄俏、人聲如沸蹂匹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)限寞。三九已至,卻和暖如春仰坦,著一層夾襖步出監(jiān)牢的瞬間履植,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工悄晃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玫霎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像庶近,于是被迫代替她去往敵國(guó)和親翁脆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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