前言
上節我們簡單的對工程初始化作了些補充,這節我們來思考下工程文件的劃分以及命名。可能我們平常開發中不會太多注重這些,但是對於有代碼潔癖的我來說這是不能容忍的,我們現在來簡單討論下。
- 什麼是文件夾?
- 文件夾以什麼命令合適?
- 文件夾多少層合適?
什麼是文件夾
文件夾,這個問題可能問得有點傻?可能大多數人回答的是,將許多
不同
的文件放在一起就形成了文件夾。其實這說法是錯誤的,關鍵就在於說是不同
。我覺得許多文件放在一起正是因爲它們有相同
的地方,也就是分門別類了。
文件夾以什麼命名合適
以什麼名字命名其實很重要!就那種你一看名字就能猜到這個文件夾是幹什麼用的,給人的感覺就很舒服,完全不用關注裏面的內容。到時候面對什麼模塊拆分、模塊重構,直接找到對應的文件夾就可以了。
文件夾多少層合適
我個人認爲文件夾層級不能超過5層。一般我都以3層爲主,如果超過5層的話,就意味着你的文件存在扁平化的必要了。就像我們的數據結構一樣,一旦層級過深的話在數據的查找、修改都會面臨許多的問題,所以扁平化很重要。
工程根目錄
├── .buckconfig
├── .flowconfig
├── .git
├── .gitattributes
├── .gitignore
├── .watchmanconfig
├── App.js
├── README.md
├── __tests__
├── android
├── app.json
├── babel.config.js
├── dist ①
├── index.js
├── ios
├── local-cli ②
├── metro.config.js
├── node_modulesa
├── package.json
├── private ③
├── src ④
└── yarn.lock
工程目錄結構還是相對簡單的,我只在初始化工程的基礎上增加了 4 個文件夾:
-
dist
是公共文件的輸出位置,比如打包生成的apk、ipa
文件; -
local-cli
存放是工程使用的scripts
文件,比如構建腳本、route
生成腳本等; -
private
文件夾有存放是個人的臨時文件,是被git
忽略的; -
src
是最重要的文件夾,工程幾乎所有的代碼都存放在裏面,我們重點講解也是要此文件夾。
src 目錄
src/
├── components
│ ├── UI
│ └── widgets
├── configs
├── modules
├── navigators
├── redux
│ ├── actions
│ ├── reducers
│ └── store
├── resources
│ ├── i18n
│ ├── images
│ ├── svg
│ └── themes
├── screens
├── services
└── utilities
根據以往項目經驗,我將src
目錄暫時建立了共 18 個子目錄:
components
是工程中的基礎組件文件夾,這裏我又再新建了UI
和widgets
文件夾。UI
指的是 App 所採用的統一風格的組件,比如ant design
、teaset
等等.我是建議UI
封裝一層此類組件,便於定製化;widgets
指的是 App 使用的自定義組件,比如Navbar
、ViewPager
等等configs
是工程中配置文件夾modules
是工程中的模塊文件夾,主要對應的是自定義的原生模塊navigators
是工程中導航控制器文件夾,比如react-navigation
redux
分爲actions
、reducers
和store
,這是redux
的經典分法,對於每個文件夾的意義的話建議是學習redux
相關知識resources
是工程中的資源文件夾,這裏分爲i18n
、images
、svg
和themes
.i18n
指多語言,也就是國際化;images
指的就是圖片資源;svg
是指圖標,非常建議 App 中大量使用 svg 圖標,輕量且加載快;themes
即主題,建議 App 至少建立一套主題screen
是工程中頁面文件夾,App 當中的所有頁面都放在裏面services
是工程中服務類文件夾,比如有關網絡請求的 Api 的相關文件utilities
是工程中的工具類文件夾,比如TimeUtil
、StringUtil
之類的文件
src
文件夾大概也就這些,日後可能還會作出修改,大家僅供參考。
Native 目錄
Native
當然指的就是Android
和IOS
工程。由於使用RN
開發,native
工程的編碼相對很少。目前,我僅在native
工程中新建modules
文件夾即可,日後根據需要自行添加。
如圖所示,我分別在Android
和IOS
工程下分別建立了modules
文件夾,並且增加了AppModule
.
總結
整個工程的目錄結構也就講解完了,也沒有什麼特別的,我只不過把以往項目中的目錄結構簡單整理了下而已。其實沒有固定的分法,要說的固定的話只有分層思想,切忌層與層之間耦合嚴重