Mac 搭建 React Native 環(huán)境踩坑記

我的第一篇文章。初到此地博助,請(qǐng)大家多多關(guān)照险污。

不想看我 BB 的,跟著官網(wǎng)的 搭建開(kāi)發(fā)環(huán)境 步驟走,基本不會(huì)有問(wèn)題蛔糯,注意選擇指定的版本拯腮,推薦選擇最新的當(dāng)前版本

必須安裝的軟件

Homebrew蚁飒,Node.js动壤,Watchman,react-native-cli

Homebrew

linux系統(tǒng)有個(gè)讓人蛋疼的通病凸椿,軟件包依賴(lài)削祈,
好在當(dāng)前主流的兩大發(fā)行版本都自帶了解決方案,Red hat有yum脑漫,Ubuntu有apt-get
 神馬髓抑,你用mac os,不好意Mac os木有類(lèi)似的東東优幸,
淚奔中幾經(jīng)折騰總算找到了第三方支持:Homebrew吨拍,Homebrew簡(jiǎn)稱(chēng)brew,
是Mac OSX上的軟件包管理工具网杆,能在Mac中方便的安裝軟件或者卸載軟件羹饰,
可以說(shuō)Homebrew就是mac下的apt-get、yum神器碳却。
  • 是否必須安裝队秩?
    Node 也可以通過(guò) 官網(wǎng) 安裝,但是 Watchman 只能通過(guò) Homebrew 安裝昼浦。為啥要安裝 Watchman 馍资?這個(gè)后面說(shuō)。
    總之关噪,你可以看看后面作者踩的坑再?zèng)Q定安不安裝鸟蟹,一來(lái)可以嘗試不安裝 Watchman 會(huì)怎么樣,二來(lái)使兔,下載這些的過(guò)程中會(huì)下載很多依賴(lài)包建钥,占空間不說(shuō),主要是慢虐沥!很慢熊经!非常慢!

  • 怎么安裝
    官網(wǎng) 首頁(yè)大字就有,終端輸入

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

列出了一大堆需要安裝的文件镐依,下載速度 30kb/s悉盆,文件總大小 21.95 Mb。居然還有 ==> The Xcode Command Line Tools will be installed. Xcode 的命令行工具也給你裝了馋吗。如果 Xcode 已經(jīng)裝了這個(gè)焕盟,應(yīng)該可以避免『暝粒可以在 Xcode -> Preferences -> Locations 菜單檢查是否已安裝脚翘。等了很久很久,上面的都下完了绍哎,跟著開(kāi)始了下載另一個(gè)文件并且報(bào)錯(cuò)来农,踩坑了。

==> Downloading https://homebrew.bintray.com/bottles-portable/portable-ruby-2.3.3.leopard_64.bottle.1.tar.gz
#######################################                                   55.3%
curl: (56) SSLRead() return error -9806
Error: Checksum mismatch.
Expected: 34ce9e4c9c1be28db564d744165aa29291426f8a3d2ef806ba4f0b9175aedb2b
Actual: d9569b8c254e6041413b7bfa569ad17b6011cbf4f6e8ec506e766760f07bbb1c
Archive: /Users/***/Library/Caches/Homebrew/portable-ruby-2.3.3.leopard_64.bottle.1.tar.gz
To retry an incomplete download, remove the file above.
Error: Failed to install vendor Ruby.
Failed during: /usr/local/bin/brew update --force

心里一頓***之后沉著冷靜下來(lái)發(fā)現(xiàn)這是一個(gè)文件沒(méi)下下來(lái)而已崇堰,可以手動(dòng)下載沃于。
瀏覽器打開(kāi) portable-ruby-2.3.3.leopard_64.bottle.1.tar.gz 下載,下載很慢 4kb/s海诲,半個(gè)小時(shí)都沒(méi)下好繁莹,改用迅雷試了下,1分鐘就下好了特幔。下載的文件放在 /Users/***/Library/Caches/Homebrew/portable-ruby-2.3.3.leopard_64.bottle.1.tar.gz 路徑下咨演,記得把之前的殘留同名文件刪除,或者直接替換蚯斯。
到這里事實(shí)上 Homebrew 已經(jīng)裝好了薄风,作者這里直接用 brew 命令安裝軟件去了,其實(shí)可以輸入 brew update 看看有沒(méi)有其他報(bào)錯(cuò)拍嵌,brew install 命令也會(huì)先執(zhí)行 update遭赂,都一樣。

設(shè)置國(guó)內(nèi)鏡像源:中科大横辆,清華大學(xué)撇他,Coding.netban.ninja

替換brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git

替換homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

官方:https://github.com/Homebrew/brew
https://github.com/Homebrew/homebrew-core

中科大:https://mirrors.ustc.edu.cn/brew.git
https://mirrors.ustc.edu.cn/homebrew-core.git

清華大學(xué):https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git

Coding.net:https://coding.net/u/homebrew/p/homebrew/git
  • 順便說(shuō)下怎么卸載龄糊,找到兩個(gè)方法逆粹,自己看著辦吧
1.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

2.
cd `brew --prefix`
rm -rf Cellar
brew prune
rm `git ls-files`
rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
rm -rf .git
rm -rf ~/Library/Caches/Homebrew

Node.js

  • 是什么
    Node.js 是一個(gè) JavaScript 運(yùn)行環(huán)境募疮,這個(gè)必須裝了炫惩,不裝沒(méi)法跑 React Native。
    先看看自己有沒(méi)有裝過(guò)阿浓,終端輸入 npm他嚷,顯示 npm: command not found 果然沒(méi)有。

  • 怎么安裝

  1. 官網(wǎng) 直接安裝,下載 pkg 安裝包直接安裝筋蓖。完成后顯示(以 8.9.4 版本為例)
This package has installed:
* Node.js v8.9.4 to /usr/local/bin/node
* npm v5.6.0 to /usr/local/bin/npm
Make sure that /usr/local/bin is in your $PATH.

用 Homebrew 規(guī)范管理
/usr/local/lib/node 文件夾中的內(nèi)容移到 /usr/local/Cellar/node/8.9.4/ 目錄下(版本號(hào)根據(jù)自己下載的版本號(hào)設(shè)定)卸耘,然后輸入命令行

brew switch node 8.9.4
  1. 通過(guò) Homebrew 安裝
brew install node

說(shuō)實(shí)話作者沒(méi)成功。先通過(guò) pkg 安裝了粘咖。然后為了驗(yàn)證用 Homebrew 安裝蚣抗,卸載了之前安裝的 Node,可能是卸載有殘留瓮下,安裝完后 npm 命令顯示 npm: command not found翰铡。
按照網(wǎng)上的辦法 uninstall,刪除相關(guān)文件讽坏,再重新安裝锭魔,仍然沒(méi)有解決。

另外路呜,通過(guò) Homebrew 不能安裝指定 node 版本或者非常麻煩迷捧。默認(rèn)安裝的是最新的不穩(wěn)定版本,可能有些模塊與穩(wěn)定版本不一致或者被廢棄胀葱。網(wǎng)上資料說(shuō)

1漠秋、安裝 homebrew-version
brew tap homebrew/versions
2、查看可安裝的node版本
brew install homebrew/versions/node

作者興致勃勃的輸入第一條命令抵屿,結(jié)果膛堤,WHAT ?

Warning: homebrew/versions was deprecated. 
This tap is now empty as all its formulae were migrated.

算了不折騰了晌该,就用官方 pkg 安裝吧肥荔,Homebrew 的下載速度也沒(méi)有手動(dòng)下載快,還這么麻煩朝群。

  • 怎么卸載
    比較麻煩燕耿,可以參考 這篇文章

Watchman

  • 是什么
    React Native 通過(guò) Watchman 來(lái)監(jiān)視代碼文件的改動(dòng)并適時(shí)進(jìn)行編譯。就像 Xcode 在每次文件被保存時(shí)對(duì)文件進(jìn)行編譯姜胖。

  • 是否必須安裝誉帅?
    看起來(lái)好像是必須的,如果不安裝可能會(huì)遇到 BUG 右莱? 無(wú)法正常開(kāi)發(fā)蚜锨?作者不信,安裝完了之后慢蜓,把它刪除了亚再,重新跑了下項(xiàng)目,居然正常運(yùn)行晨抡,改一下代碼運(yùn)行也正常顯示了改動(dòng)后的結(jié)果氛悬。所以则剃,不安裝到底會(huì)怎樣,作者也不知道如捅,也許是安裝完后刪除有殘留之類(lèi)的棍现。不過(guò)既然大家都說(shuō)可能會(huì)有問(wèn)題,為了保險(xiǎn)镜遣,還是安裝吧己肮。

  • 怎么安裝

brew install watchman

命令是很簡(jiǎn)單,只不過(guò)悲关,運(yùn)行后顯示
Installing dependencies for watchman: autoconf, automake, libtool, pkg-config, openssl, pcre
各種依賴(lài)包需要下載朴肺。最討厭的就是為了下一個(gè)東西,下一堆亂七八糟的東西坚洽。這就算了戈稿,還巨慢!簡(jiǎn)直**不能忍讶舰。openssl 這種東西不是
mac 內(nèi)置的么鞍盗?就不能兼容一下么!
半個(gè)小時(shí)之后跳昼,它會(huì)完成的......

react-native-cli

React Native 的命令行工具般甲,必須安裝。
yarn 是替換 npm 的工具鹅颊,據(jù)說(shuō)可以加速 node 模塊下載敷存。用不著,暫不安裝了堪伍。

sudo npm install -g react-native-cli

我這需要 sudo 權(quán)限锚烦。很快,瞬間完成帝雇。測(cè)試 react-native 命令正常涮俄,安裝成功。

創(chuàng)建項(xiàng)目

cd 到想要?jiǎng)?chuàng)建的文件夾下
react-native init AwesomeProject

會(huì)在當(dāng)前目錄下創(chuàng)建名為 AwesomeProject 的工程尸闸。文件總大小 129.4MB彻亲,所以需要花點(diǎn)時(shí)間。

運(yùn)行

  1. 使用命令行工具運(yùn)行吮廉。
cd AwesomeProject
react-native run-ios
  1. 使用 Xcode 運(yùn)行
    使用 Xcode 打開(kāi) AwesomeProject/ios/AwesomeProject.xcodeproj苞尝,然后像運(yùn)行 iOS 項(xiàng)目那樣,點(diǎn)擊 Run 按鈕宦芦。

運(yùn)行的時(shí)候宙址,有個(gè)坑。
編譯進(jìn)度卡在 double-conversion Running 1 of 1 custom shell scripts
因?yàn)樾枰玫綆讉€(gè)第三方庫(kù)來(lái)編譯踪旷,而這個(gè)庫(kù)下載非曼氛!常!慢令野!
查看 ~/.rncache/ 目錄下果然有幾個(gè)沒(méi)下載好的文件舀患。(在運(yùn)行前沒(méi)有 rncache 文件夾)
所以需要做的,就是下載好第三方庫(kù)气破,放到 rncache 目錄下聊浅。參考 解決辦法

查看需要的依賴(lài)包:https://github.com/facebook/react-native/blob/master/scripts/ios-install-third-party.sh
branch 需要修改為對(duì)應(yīng)的版本
看到以下代碼就是需要的第三方庫(kù)了:
fetch_and_unpack glog-0.3.4.tar.gz https://github.com/google/glog/archive/v0.3.4.tar.gz 69f91cd5a1de35ead0bc4103ea87294b0206a456 "\"$SCRIPTDIR/ios-configure-glog.sh\""
fetch_and_unpack double-conversion-1.1.5.tar.gz https://github.com/google/double-conversion/archive/v1.1.5.tar.gz 96a8aba1b4ce7d4a7a3c123be26c379c2fed1def
fetch_and_unpack boost_1_63_0.tar.gz https://github.com/react-native-community/boost-for-react-native/releases/download/v1.63.0-0/boost_1_63_0.tar.gz c3f57e1d22a995e608983effbb752b54b6eab741
fetch_and_unpack folly-2016.09.26.00.tar.gz https://github.com/facebook/folly/archive/v2016.09.26.00.tar.gz f3b928b5039235bad6cece638c597c6684d1e4e6

取其中的文件網(wǎng)址下載。boost_1_63_0.tar.gz 迅雷就是下載不動(dòng)现使,換瀏覽器低匙,開(kāi) vpn 又奇跡般的飛快了。其他的用迅雷下載碳锈,很快就好了顽冶。全部放到 ~/.rncache/ 目錄下。
需要注意的是文件名的問(wèn)題售碳。運(yùn)行后發(fā)現(xiàn) rncache 目錄下出現(xiàn) double-conversion-1.1.5.tar.gz 文件强重,卡在下載這個(gè)文件,其實(shí)是文件名錯(cuò)誤贸人,與之對(duì)應(yīng)的下載文件是 v1.1.5.tar.gz间景,檢查一下其他文件名,v2016.09.26.00.tar.gz 修改為 folly-2016.09.26.00.tar.gz艺智,編譯卡在哪個(gè)文件就是哪個(gè)文件名不對(duì)倘要。再運(yùn)行,編譯大概2分鐘十拣,正常運(yùn)行封拧。界面加載了一會(huì)兒,出現(xiàn)歡迎界面夭问。

開(kāi)發(fā)環(huán)境

推薦使用 Sublime Text 3(免費(fèi)哮缺,需要配置插件)或者 WebStorm(收費(fèi))。
官方推薦 Nuclide甲喝,據(jù)說(shuō)很卡尝苇,參考 解決辦法 ,反正挺折騰埠胖。

作者使用 Sublime Text 3 糠溜,如何配置 React Native 開(kāi)發(fā)環(huán)境參考 這篇文章
先安裝 Package Control 直撤,安裝方法:https://packagecontrol.io/installation
View > Show Console 輸入下面一大段代碼 完成

import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

安裝2個(gè)插件:

  • babel-sublime:支持 Javascript非竿,ES6 和 JSX 語(yǔ)法高亮
  • react-native-snippets:支持 React Native 代碼片段

安裝方法:
Sublime Text -> Preferences -> Package Control
在 Package Control 對(duì)話框中輸入 Package Control:Install Packages
在彈出的對(duì)話框中輸入 Babel ,即可找到 babel-sublime 谋竖,點(diǎn)擊安裝红柱。
安裝后啟用:打開(kāi)任意文件承匣,View -> Syntax -> Open all with current extension as… -> Bable -> JavaScript (Bable)

react-native-snippets 同樣在 Package Control 中锤悄,Package Control:Install Packages 韧骗,在彈出的對(duì)話框中輸入 react-native-snippets 安裝。

驗(yàn)證:在文件中輸入 rncc零聚,有自動(dòng)補(bǔ)足袍暴,即安裝成功。
其他代碼片段參見(jiàn) 插件介紹隶症。

真機(jī)運(yùn)行

作者還沒(méi)試過(guò)政模,參考 這篇文章 ,等作者踩坑了再補(bǔ)充蚂会。

參考資料

React-Native學(xué)習(xí)指南
https://reactnative.cn/docs/0.51/getting-started.html
http://wiki.jikexueyuan.com/project/react-native/getting-started.html
https://www.cnblogs.com/yexiaochai/p/6042112.html
http://www.reibang.com/p/9b7c329da68a

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淋样,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胁住,更是在濱河造成了極大的恐慌习蓬,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件措嵌,死亡現(xiàn)場(chǎng)離奇詭異躲叼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)企巢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)枫慷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人浪规,你說(shuō)我怎么就攤上這事或听。” “怎么了笋婿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵誉裆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缸濒,道長(zhǎng)足丢,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任庇配,我火速辦了婚禮斩跌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捞慌。我一直安慰自己耀鸦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布啸澡。 她就那樣靜靜地躺著袖订,像睡著了一般氮帐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洛姑,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天上沐,我揣著相機(jī)與錄音,去河邊找鬼吏口。 笑死奄容,一個(gè)胖子當(dāng)著我的面吹牛冰更,可吹牛的內(nèi)容都是我干的产徊。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜀细,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舟铜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起奠衔,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谆刨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后归斤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體痊夭,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年脏里,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了她我。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迫横,死狀恐怖番舆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矾踱,我是刑警寧澤恨狈,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站呛讲,受9級(jí)特大地震影響禾怠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贝搁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一刃宵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧徘公,春花似錦牲证、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)十厢。三九已至,卻和暖如春捂齐,著一層夾襖步出監(jiān)牢的瞬間蛮放,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工奠宜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留包颁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓压真,卻偏偏與公主長(zhǎng)得像娩嚼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滴肿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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