React Native 常用命令

最近在寫React Native的項目 在這里記錄一下将宪,推薦reactnative中文網(wǎng)。要養(yǎng)成良好的習(xí)慣泰涂,上圖??

u=3193006289,3802606706&fm=23&gp=0.jpg

從頭開始

寫項目肯定要舒適化項目對吧
react-native init MyReactNativeProject

提示:你可以使用--version參數(shù)創(chuàng)建指定版本的項目。
例如 react-native init MyReactNativeProject --version 0.39.2。注意版本號必須精確到兩個小數(shù)點赡茸。

在模擬器上運行

當(dāng)你完成了初始化React Native新項目后,就可以在項目目錄下運行react-native run-ios來啟動模擬器祝闻。如果一切配置都沒有問題占卧,應(yīng)該很快就能看到你的應(yīng)用在iOS模擬器上運行起來。

指定模擬的設(shè)備類型

你可以使用--simulator
參數(shù)联喘,在其后加上要使用的設(shè)備名稱來指定要模擬的設(shè)備類型(目前默認(rèn)為"iPhone 6")华蜒。如果你要模擬iPhone 4s,那么這樣運行命令即可:
react-native run-ios --simulator "iPhone 4s"豁遭。
你可以在終端中運行
xcrun simctl list devices
來查看具體可用的設(shè)備名稱叭喜。

在設(shè)備上運行

你可以在真機上訪問開發(fā)服務(wù)器以快速測試和迭代。首先需要確保設(shè)備已使用usb連接至電腦蓖谢,同時和電腦處在同一wifi網(wǎng)絡(luò)內(nèi)捂蕴,然后在Xcode中選擇你的設(shè)備作為編譯目標(biāo)(左上角運行按鈕的右邊),然后點擊運行按鈕即可蜈抓。如果你需要在真機上啟用調(diào)試功能启绰,則需要打開RCTWebSocketExecutor.m文件,然后將其中的"localhost"改為你的電腦的IP地址沟使,最后啟用開發(fā)者菜單中的"Debug JS Remotely"選項委可。

項目的時候我們肯定會用到別人造好的輪子對吧就是所謂的三方庫How to use?
 npm install 庫的名稱 —save

// 生產(chǎn)環(huán)境需要的庫 會在package.json文件中的dependencies中記錄來鏈接庫

 npm install 庫的名稱 --save-dev 

// 開發(fā)環(huán)境下的庫 會在package.json文件中的devDependencies中記錄來鏈接庫

react-native link 

// 完成了!現(xiàn)在所有的原生依賴都成功地鏈接到你的iOS/Android項目了腊嗡。

提示:有寫三方庫是不需要link的 有寫三方庫link不成功着倾,需要自己手動添加。
項目寫完了是不是要打包燕少?

開發(fā)React Native的過程成,js代碼和圖片資源運行在一個Debug Server上卡者,每次更新代碼之后只需要使用command+R鍵刷新就可以看到代碼的更改,這種方式對于調(diào)試來說是非常方便的客们。
但當(dāng)我們需要發(fā)布App到App Store的時候就需要打包,使用離線的js代碼和圖片崇决。這就需要把JavaScript和圖片等資源打包成離線資源材诽,在添加到Xcode中,然后一起發(fā)布到App Strore中恒傻。
打包離線資源需要使用命令
react-native bundle

React Native的react-native bundle
命令是用來進行打包的命令脸侥,
react-native bundle
的詳細(xì)命令選項https://github.com/facebook/react-native/blob/master/local-cli/bundle/bundleCommandLineArgs.js
其中我們常使用的一線命令選項:
--entry-file ,ios或者android入口的js名稱盈厘,比如index.ios.js
--platform ,平臺名稱(ios或者android)
--dev ,設(shè)置為false的時候?qū)avaScript代碼進行優(yōu)化處理睁枕。
--bundle-output, 生成的jsbundle文件的名稱,比如./ios/bundle/index.ios.jsbundle
--assets-dest 圖片以及其他資源存放的目錄,比如./ios/bundle

打包命令如下:

  react-native bundle --entry-file index.ios.js --platform ios -- dev false --bundle-output ./ios/bundle/index.ios.jsbundle --assets-dest ./ios/bundle

打包的時候注意先在ios文件夾下創(chuàng)建一個build文件夾

為了方便使用沸手,也可以把打包命令寫到npm script中:

    "scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"bundle-ios":"node node_modules/react-native/local-cli/cli.js bundle --entry-file index.ios.js  --platform ios --dev false --bundle-output ./ios/bundle/index.ios.jsbundle --assets-dest ./ios/bundle"
  },

然后運行命令直接打包:

  npm run bundle-ios

jsCodeLocation

在ios中AppDelegate里可以看到設(shè)置JavaScript代碼位置的代碼:
Debug Server上的設(shè)置

    NSURL *jsCodeLocation;
    jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];

        RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                  moduleName:@"FreshqiaoReact"
                                           initialProperties:nil
                                               launchOptions:launchOptions];

在開發(fā)的過程中可以在這里配置Debug Server的地址外遇,當(dāng)發(fā)布上線的時候,就需要使用離線的jsbundle文件契吉,因此需要設(shè)置jsCodeLocation為本地的離線jsbundle跳仿。
設(shè)置離線的jsCodeLocation:

   jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"bundle/index.ios" withExtension:@"jsbundle"];

離線包里的.jsbundle文件是經(jīng)過優(yōu)化處理的,因此運行效率也會比Debug的時候更高一些栅隐。

如果報錯

RCTSRWebSocket.m報錯塔嬉,需要在報錯的錯誤處SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t*)mask_key)做處理,只需在該處加上(void)即可租悄。如下:(void)SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);

處理 RCTSRWebSocket.m還是不行谨究。還需要在RCTScrollView.m 做出修改

@implementation RCTCustomScrollView

{

__weak UIView *_dockedHeaderView;

RCTRefreshControl *_refreshControl; //加入此行

}

不然會報 Use of undeclared identifier '_refreshControl'; did you mean 'refreshControl'?錯誤,RCTScrollView.m 位于Xcode項目中l(wèi)ibraries下React.xcodeproj / React / View

運行g(shù)ithub上的項目

npm install -g React-native-cli
npm install
react-native start

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泣棋,一起剝皮案震驚了整個濱河市胶哲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌潭辈,老刑警劉巖鸯屿,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異把敢,居然都是意外死亡寄摆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門修赞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婶恼,“玉大人,你說我怎么就攤上這事柏副」窗睿” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵割择,是天一觀的道長眷篇。 經(jīng)常有香客問我,道長荔泳,這世上最難降的妖魔是什么蕉饼? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任虐杯,我火速辦了婚禮,結(jié)果婚禮上椎椰,老公的妹妹穿的比我還像新娘厦幅。我一直安慰自己,他們只是感情好慨飘,可當(dāng)我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著译荞,像睡著了一般瓤的。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吞歼,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天圈膏,我揣著相機與錄音,去河邊找鬼篙骡。 笑死稽坤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糯俗。 我是一名探鬼主播尿褪,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼得湘!你這毒婦竟也來了杖玲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤淘正,失蹤者是張志新(化名)和其女友劉穎摆马,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸿吆,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡囤采,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惩淳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕉毯。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖黎泣,靈堂內(nèi)的尸體忽然破棺而出恕刘,到底是詐尸還是另有隱情,我是刑警寧澤抒倚,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布褐着,位于F島的核電站,受9級特大地震影響托呕,放射性物質(zhì)發(fā)生泄漏含蓉。R本人自食惡果不足惜频敛,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望馅扣。 院中可真熱鬧斟赚,春花似錦、人聲如沸差油。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓄喇。三九已至发侵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妆偏,已是汗流浹背刃鳄。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钱骂,地道東北人叔锐。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像见秽,于是被迫代替她去往敵國和親愉烙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,606評論 2 350

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