React Native從零開始 -- 搭建環(huán)境(Windows)& 創(chuàng)建項(xiàng)目

最近React Native火的不要不要的,打哪兒看都全是好評苞尝,從去年年底就開始的Native末日言論又被炒了起來硫惕。居安思危,入職以來一直做得純Native應(yīng)用野来,連WebView / UIWebView都很少用,感覺與目前主流的Hybrid App嚴(yán)重脫軌∽倏酰現(xiàn)在正好借手頭項(xiàng)目完結(jié)了沒事做學(xué)習(xí)一下曼氛,其實(shí)官網(wǎng)寫的文檔還是比較詳細(xì)的,這里只是總結(jié)和整理令野。

首先對比一下Native APP舀患、Hybrid APP、 Web App气破、React Native:

Native APP

Native APP 指的是原生應(yīng)用聊浅,使用Java/OC等開發(fā),一般依托于操作系統(tǒng)现使,有很強(qiáng)的交互低匙,是一個完整的App,可拓展性強(qiáng)碳锈。需要用戶下載安裝使用顽冶。

優(yōu)點(diǎn):

(1)用戶體驗(yàn)高,可針對不同平臺提供不同的體驗(yàn),針對平臺特性去做用戶體驗(yàn)優(yōu)化售碳。
(2)可以利用系統(tǒng)API及平臺特性强重,訪問手機(jī)的提供的功能(GPS,相機(jī)等)贸人。
(3)可定制的專場動畫和切換動畫间景,與系統(tǒng)高度切合,可獲得更快的運(yùn)行速度和性能艺智,并支持豐富的圖形和動畫倘要。
(4)擁有系統(tǒng)級別的通知或提醒,用戶留存率高力惯。
(5)可訪問本地資源碗誉,支持離線工作,節(jié)省用戶的流量成本父晶。
(6)開源框架豐富哮缺,已經(jīng)形成了良好的生態(tài)環(huán)境。

缺點(diǎn):

(1)開發(fā)成本高甲喝,上手需要一定的平臺基礎(chǔ)尝苇,需要針對不同平臺需要不同的技術(shù)背景進(jìn)行開發(fā),并且開發(fā)相對來說比較繁瑣。
(2)維護(hù)成本高糠溜,需要兼容歷史版本淳玩,保證歷史版本的正常使用。用戶需要下載升級非竿,雖然現(xiàn)在熱修復(fù)熱更新比較熱蜕着,但是我認(rèn)為還達(dá)不到正常更新版本的地步。
(3)分發(fā)成本高红柱,分發(fā)到不同的應(yīng)用商店承匣,需要進(jìn)行不同的配置打包。

Web App

我理解的Web App說白了就是一套適配各種屏幕的Html5頁面锤悄,使用Html5/JavaScript/CSS開發(fā)韧骗,由前端開發(fā)人員編寫,只需要一個瀏覽器就能輕松訪問零聚。

優(yōu)點(diǎn):

(1)開發(fā)成本低袍暴,一個web前端開發(fā)人員不需要學(xué)習(xí)很多新技術(shù)即可進(jìn)行開發(fā)。
(2)開發(fā)一次基本可以適配所有平臺隶症,適用范圍廣政模,再次體現(xiàn)了成本低。
(3)更新快蚂会,用戶看到的總是最新版本览徒,無需下載,隨開隨用颂龙。

缺點(diǎn):

(1)用戶體驗(yàn)相對來說比較差习蓬,Dom解析耗費(fèi)了大量的時間(傳送門),交互圖形和動畫效果較差措嵌,尤其是弱網(wǎng)情況下基本不能忍躲叼,而且對系統(tǒng)資源的損耗遠(yuǎn)遠(yuǎn)超過Native應(yīng)用。
(2)用戶存留率低企巢,只有打開才有通知推送枫慷。
(3)訪問手機(jī)文件和手機(jī)功能的能力相對來說比較薄弱。
(4)雖然Html5可以離線使用浪规,但是連接網(wǎng)絡(luò)的時候把用戶想看的不想看的頁面都給下載下來或听,個人認(rèn)為對流量要求比較高,不符合大眾使用笋婿。

Hybrid App

Hybrid App又叫混合應(yīng)用誉裆,是一種介于Native App、Web App之間的App缸濒,結(jié)合了兩種App模式的優(yōu)點(diǎn)足丢,一般來說是使用Native來處理用戶和系統(tǒng)的交互粱腻,Web來展示內(nèi)容。通過原生系統(tǒng)的WebView / UIWebView或者自定義的WebView來實(shí)現(xiàn)Web頁面的嵌入斩跌,現(xiàn)在大部分應(yīng)用都是采用的這種模式绍些。

優(yōu)點(diǎn):

(1)可以利用系統(tǒng)API及平臺特性,訪問手機(jī)的提供的功能(GPS耀鸦,相機(jī)等)柬批。
(2)用戶體驗(yàn)適中,可定制的專場動畫和切換動畫,與系統(tǒng)高度切合袖订,可獲得更快的運(yùn)行速度和性能萝快,并支持豐富的圖形和動畫。
(3)擁有系統(tǒng)級別的通知或提醒著角,用戶留存率高。
(4)開發(fā)成本適中旋恼,Web頁面替代了部分Native頁面吏口,并且可以跨平臺使用,節(jié)省了開發(fā)時間冰更。

缺點(diǎn):

(1)維護(hù)成本高产徊,需要兼容歷史版本,保證歷史版本的正常使用蜀细。
(2)分發(fā)成本高舟铜,分發(fā)到不同的應(yīng)用商店,需要進(jìn)行不同的配置打包奠衔。
(3)嵌入的Web頁面在弱網(wǎng)情況下體驗(yàn)比較差谆刨。

React Native

React Native (簡稱RN)是Facebook于2015年四月開源的跨平臺移動應(yīng)用開發(fā)框架,是Facebook早先開源的Web UI框架 React 在原生移動應(yīng)用平臺的衍生產(chǎn)物归斤,目前支持iOS和安卓兩大平臺痊夭。該框架使用Javascript,類似于HTML的JSX脏里,以及CSS來開發(fā)移動應(yīng)用UI她我,因此熟悉Web開發(fā)的人只需很少的學(xué)習(xí)成本就可以轉(zhuǎn)入移動應(yīng)用開發(fā)。
RN運(yùn)行時包含一個原生的主線程和一個JS線程迫横,JS線程執(zhí)行JS代碼番舆,負(fù)責(zé)界面布局和業(yè)務(wù)邏輯處理,原生線程負(fù)責(zé)界面渲染和原生組件的執(zhí)行矾踱。RN里面盡量使用原生組件恨狈,避免重復(fù)造輪子。這樣的好處呛讲,一是可以利用現(xiàn)有的大量的原生組件拴事,降低入門門檻沃斤;二是可以達(dá)到跟原生應(yīng)用一樣的性能;三是通過JS封裝過后的組件刃宵,可以支持跨平臺衡瓶。
JS在RN里面的作用類似于Python這樣的支持調(diào)用原生C庫的腳本語言,都是起著“膠水”的作用牲证。復(fù)雜計(jì)算和底層功能都通過調(diào)用原生接口來完成哮针,流程控制和業(yè)務(wù)邏輯則在“膠水”語言里完成。這樣既提高了開發(fā)效率坦袍,又兼顧了性能十厢。

React Native是 Facebook 開源的框架,可以直接用JavaScript 開發(fā)原生的APP捂齐。React Native和Hybrid App很像蛮放,很多人也喜歡吧React Native和Hybrid App混為一談,但其實(shí)并不是奠宜。React Native采用JavaScript橋接加Native橋接兩個方式合并起來包颁,然后加上增加對比差異化算法增量渲染,而且渲染都是Native渲染压真,雖然使用JavaScript 編寫娩嚼,但是后臺是渲染成Native來使用的,性能雖然比純原生差一點(diǎn)滴肿,但是還是遠(yuǎn)遠(yuǎn)比Html5的性能要快很多岳悟。

優(yōu)點(diǎn):

(1)Learn once,write anywhere。注意泼差,不是Java的Write once, run anywhere贵少!
(2)因?yàn)槭荖ative渲染,所以性能相對來說比較高堆缘。
(3)可以利用系統(tǒng)API及平臺特性春瞬,訪問手機(jī)的提供的功能(GPS,相機(jī)等)套啤。
(4)擁有系統(tǒng)級別的通知或提醒宽气,用戶留存率高。

缺點(diǎn):

(1)由于還不是穩(wěn)定版本潜沦,版本更新太快萄涯。并且更新新版可能會出現(xiàn)不兼容的問題或者額外的bug需要開發(fā)者自己去處理。
(2)學(xué)習(xí)成本高唆鸡。要學(xué)習(xí)Javascript涝影,還需要涉及到IOS,Android開發(fā)相關(guān)知識争占。(Boss:這個工作特么的要分給前端做呢還是給客戶端做呢燃逻?P蚰俊)
(3)支持的組件不全面。大部分廠商并不支持React Native伯襟。
(4)截止到現(xiàn)在還是個新技術(shù)猿涨,生態(tài)剛剛開始生成姆怪,但是還沒有到Native生態(tài)那么豐富的地步叛赚,很多需求還得自己動手從頭寫起。

題外:

一般要學(xué)習(xí)一門新技術(shù)的時候都會查技術(shù)的前景和發(fā)展?jié)摿遥拖嚓P(guān)主流技術(shù)對比俺附。不論從已有的生態(tài)和發(fā)展趨勢躲因,還是公司的技術(shù)要求上來看倚聚,我覺得目前學(xué)習(xí)React Native是最好的選擇。過程在下面羅列出來(我都沒用過古劲,暫時都是收集的觀點(diǎn)揪胃,意見保留到我都試用之后):

  • Dcloud : 可能是目前國人開發(fā)的最易用的璃哟、最優(yōu)秀的跨平臺框架,并且有自己的IDE只嚣,HBuilder和MUI搭配雖然我沒用過,但是周圍朋友公司在用艺沼,贊不絕口册舞。據(jù)說有人查過最終的頁面結(jié)構(gòu),依舊是基于WebView的渲染障般,所以性能暫時還是比不過React Native的调鲸。具體詳情見傳送門
  • LuaView : 阿里的開源SDK挽荡,采用的是Lua腳本語言藐石,作者團(tuán)隊(duì)更新比較慢,資料也比較少定拟,不推薦于微。
  • Weex(Vue-Native) : 同樣是阿里的開源作品,目測是React Native最有力的競爭者青自,易用性比React Native好株依,并且性能上各有千秋,甚至說還要更優(yōu)秀一點(diǎn)延窜,唯一的缺點(diǎn)是開源時間比較晚恋腕,資料還不夠豐富,沒有形成強(qiáng)大的生態(tài)環(huán)境逆瑞,不過按照目前的形勢看荠藤,一切只是時間問題伙单。和React Native的Learn once,write anywhere 理念不同的是,Weex 比較傾向于和Java一樣的 Write once, run anywhere哈肖。 具體詳情見傳送門1吻育,傳送門2

安裝環(huán)境:

目前支持的開發(fā)平臺是Windows,Mac和Linux牡彻。因?yàn)榧依镫娔X用的是Win7扫沼,所以暫時只總結(jié)Windows和Android下的開發(fā)環(huán)境搭建。其他平臺請看官網(wǎng)這里庄吼。

搭建React Native平臺環(huán)境需要安裝Python2Node.js缎除。我們可以直接去官網(wǎng)下載配置環(huán)境,不過官方推薦我們用Chocolatey來進(jìn)行環(huán)境搭建总寻。

Chocolatey is a package manager for Windows (like apt-get or yum but for Windows). It was designed to be a decentralized framework for quickly installing applications and tools that you need. It is built on the NuGet infrastructure currently using PowerShell as its focus for delivering packages from the distros to your door, err computer.

1.一般來說器罐,使用Chocolatey來安裝軟件的時候,需要以管理員的身份來運(yùn)行命令提示符窗口渐行。我們在命令行下輸入如下命令(自備梯子):

@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\\\\chocolatey\\\\bin

安裝比較慢轰坊,而且沒有進(jìn)度條,忍忍祟印。

2.安裝Node.js 和 Python2肴沫。注意,目前已知Node 7.1版本在windows上無法正常工作蕴忆,請注意避開這個版本颤芬!

choco install nodejs.install
choco install python2

3.npm是隨同Node.js一起安裝的包管理工具,能解決Node.js代碼部署上的很多問題套鹅。而Yarn是Facebook提供的替代npm的工具(Yarn vs npm: 功能上的差異)站蝠,可以加速node模塊的下載。React Native的命令行工具用于執(zhí)行創(chuàng)建卓鹿、初始化菱魔、更新項(xiàng)目、運(yùn)行打包服務(wù)(packager)等任務(wù)(自備梯子)吟孙。

npm install -g yarn react-native-cli

如果沒有合適的梯子澜倦,那就先設(shè)置下npm鏡像(如果不能識別npm命令,你可能需要重新開一個命令行窗口)

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

4.我們需要Java Development Kit [JDK] 1.8或更高版本杰妓。你可以在命令行中輸入以下來查看你當(dāng)前安裝的JDK版本(記得配置JAVA_HOME)肥隆。

 javac -version

如果版本不合要求,則可以到 官網(wǎng)上下載稚失,或是使用包管理器來安裝栋艳。

choco install jdk8

5.安裝Android開發(fā)環(huán)境,基本功了句各,網(wǎng)上大把的教程吸占,這里就不準(zhǔn)備在介紹了晴叨。值得一提的是React Native對AndroidStudio的最低支持是2.0,并且確保ANDROID_HOME
環(huán)境變量正確地指向了你安裝的Android SDK的路徑矾屯。

6.進(jìn)行到現(xiàn)在基本已經(jīng)完成環(huán)境搭建了兼蕊,為了提升Java編譯速度,我還開啟了Gradle Daemon

(if not exist "%USERPROFILE%/.gradle" mkdir "%USERPROFILE%/.gradle") && (echo org.gradle.daemon=true >> "%USERPROFILE%/.gradle/gradle.properties")

自此我們的React Native環(huán)境搭建已經(jīng)完成件蚕,接下來可以新建一個項(xiàng)目來測試環(huán)境有沒有搭建成功孙技。

創(chuàng)建一個Hello RN

讓我們從Hello RN開始我們的React Native旅程:

react-native init HelloRN
創(chuàng)建完成.png

漫長的等待結(jié)束后我們可以看到,如果項(xiàng)目創(chuàng)建完成排作,會自動執(zhí)行編譯和部署到手機(jī)上牵啦,需要在AndroidStudio打開并且模擬器或者真機(jī)的adb連接成功情況下才能查看。如果不會自動編譯部署就需要手動進(jìn)行如下命令進(jìn)行打開服務(wù):

react-native start

默認(rèn)服務(wù)端口號是8081妄痪,如果想要修改端口號哈雏,有兩種方式:

  • 開啟服務(wù)的時候直接指定端口號
react-native start --port XXXX
  • 修改默認(rèn)端口配置文件,配置文件在項(xiàng)目根目錄下的node_modules\react-native\local-cli\server\server.js里面衫生,_server的default里面進(jìn)行端口號修改裳瘪。

如果忘了開AndroidStudio或者沒有連接模擬器 / 真機(jī),沒關(guān)系罪针,我們可以手動進(jìn)行編譯部署:在AndroidStudio打開并且模擬器或者真機(jī)的adb連接成功情況下打開并編譯我們的Hello RN:

cd HelloRN
react-native run-android

如果你碰到了ERROR Watcher took too long to load的報(bào)錯彭羹,請嘗試將這個文件中的MAX_WAIT_TIME值改得更大一些 (文件在node_modules/react-native/目錄下)。

修改項(xiàng)目

如果你已經(jīng)成功運(yùn)行了項(xiàng)目泪酱,我們可以簡單嘗試玩一下:

  • 使用你喜歡的文本編輯器打開index.android.js并隨便改上幾行
  • 按兩下R鍵派殷,或是用Menu鍵打開開發(fā)者菜單,然后選擇 Reload JS 就可以看到你的最新修改西篓。
  • 在終端下運(yùn)行以下命令可以看到你的應(yīng)用的日志愈腾。
adb logcat *:S ReactNative:V ReactNativeJS:V

開發(fā)IDE配置

雖然我們已經(jīng)成功跑起來了Hello RN但是開發(fā)沒有IDE怎么行憋活,我選擇的是AndroidStudio + WebStorm組合岂津。如果遇到gradle很久的問題,請直接移步問題三悦即。

AndroidStudio

直接Import項(xiàng)目根目錄下的android即可吮成。

AndroidStudio導(dǎo)入項(xiàng)目.png
WebStorm

WebStorm需要進(jìn)行一點(diǎn)點(diǎn)配置:
1.首先導(dǎo)入項(xiàng)目,直接Open整個根目錄:

WebStorm導(dǎo)入項(xiàng)目.png

2.WebStorm提示你需要切換JSX辜梳,直接切換Switch

切換JSX.png

3.進(jìn)行Edit Configurations粱甫,配置npm

配置npm.png

4.運(yùn)行服務(wù),然后通過WebStrom命令窗口部署即可

IDE部署.png

IDE環(huán)境裝載結(jié)束作瞄,可以開始無限火力了茶宵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宗挥,隨后出現(xiàn)的幾起案子乌庶,更是在濱河造成了極大的恐慌种蝶,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞒大,死亡現(xiàn)場離奇詭異螃征,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)透敌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門盯滚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酗电,你說我怎么就攤上這事魄藕。” “怎么了顾瞻?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵泼疑,是天一觀的道長。 經(jīng)常有香客問我荷荤,道長退渗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任蕴纳,我火速辦了婚禮会油,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘古毛。我一直安慰自己翻翩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布稻薇。 她就那樣靜靜地躺著嫂冻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塞椎。 梳的紋絲不亂的頭發(fā)上桨仿,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音案狠,去河邊找鬼服傍。 笑死,一個胖子當(dāng)著我的面吹牛骂铁,可吹牛的內(nèi)容都是我干的吹零。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拉庵,長吁一口氣:“原來是場噩夢啊……” “哼灿椅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茫蛹,失蹤者是張志新(化名)和其女友劉穎泣懊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麻惶,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馍刮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窃蹋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卡啰。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖警没,靈堂內(nèi)的尸體忽然破棺而出匈辱,到底是詐尸還是另有隱情,我是刑警寧澤杀迹,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布亡脸,位于F島的核電站,受9級特大地震影響树酪,放射性物質(zhì)發(fā)生泄漏浅碾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一续语、第九天 我趴在偏房一處隱蔽的房頂上張望垂谢。 院中可真熱鬧,春花似錦疮茄、人聲如沸滥朱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徙邻。三九已至,卻和暖如春畸裳,著一層夾襖步出監(jiān)牢的瞬間缰犁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工躯畴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留民鼓,地道東北人薇芝。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓蓬抄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親夯到。 傳聞我的和親對象是個殘疾皇子嚷缭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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