每一個公司甚至每一個項目組,在開發新項目的時候都會有一些本身特點的東西,好比公共組件,ajax請求攔截處理,內部積累的一些業務邏輯等等,若是沒有本身的腳手架,那麼拷貝代碼成爲常態,每一個項目的結構,甚至是構建配置都會由很大差別,致使代碼維護成爲一個難題。html
generator-ivweb是由騰訊IVWEB團隊設計的腳手架,基於團隊開源項目feflow,feflow是一個前端集成開發環境,詳細介紹能夠看這裏:feflow。前端
webpack4
...node
相對於官方腳手架,咱們不只僅是初始化一個項目,更多的是知足實際開發場景。react
generator-ivweb-app ├── README.md ├── package.json ├── .babelrc ├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── feflow.json ├── config.json ├── node_modules ├── dist └── src ├── assets ├── middleware ├── modules └── pages ├── otherPage └── indexPage ├── index.html ├── index.js ├── index.less ├── index.js ├── init.js ├── pageComponent.js ├── actions ├── assets ├── components └── reducers
{ "builderOptions": { "outDir": "dist" //輸出目錄名稱 } }
https://xxx.xxx.xxx/xxx/indexPage.html https://xxx.xxx.xxx/xxx/otherPage.html
正常來講,多頁應用只須要有本身的入口就能夠,在入口文件咱們可能須要作這麼幾件事webpack
建立BasePage | 頁面繼承 |
---|---|
此處只寫了對於多頁的應用,對於複雜的單頁應用一樣是適用的。ios
一般咱們在開發一個單頁應用都會抽離一些公共組件,好比title-bargit
首頁 | 博客頁 |
---|---|
若是這裏是個多頁應用,一樣是能夠公用的,所以對於多頁應用來講,組件應該是這樣的結構:github
每一個頁面的狀態管理一樣是能夠抽離一些公共action和reducer,好比登陸邏輯web
鑑於腳手架默認是多頁項目,咱們把公共模塊放到外層目錄,減小跟每一個頁面的耦合。ajax
modules ├── common //公用js模塊 ├── components //公用組件 ├── globalStore //store配置,包含中間件注入 └── page //頁面結構繼承組件
這裏使用feflow的構建器:builder-webpack4,固然這個東西一樣是能夠配置的,甚至能夠根據咱們的官方構建器寫本身的構建器。
腳手架是基於feflow的,所以feflow.json文件是feflow項目的基礎配置,包含了一些構建選項,好比輸出目錄,域名,webpack相關等。
{ "builderType": "builder-webpack4", //構建器類型 "builderOptions": { "product": "", //產品民稱 "outDir": "dist", //構建輸出目錄 "minifyHTML": true, "minifyCSS": true, "minifyJS": true, "inlineCSS": true, "usePx2rem": true, //是否轉化px "remUnit": 37.5, //rem基準 "remPrecision": 6, "inject": true, "useTreeShaking": true, "port": 8001, //項目端口 "hot": true, "externals": [ { "module": "react", "entry": "//11.url.cn/now/lib/16.2.0/react.min.js?_bid=3123", "global": "React" }, { "module": "react-dom", "entry": "//11.url.cn/now/lib/16.2.0/react-dom.min.js?_bid=3123", "global": "ReactDOM" } ] } }
項目默認是不顯示構建相關配置的,一方面,咱們有暴露一些基礎配置項,另外一方面避免多人協做開發更改配置問題,若是你想查看或修改可使用命令展現(不建議修改配置)
feflow eject
generator-ivweb先天支持多頁應用,而不用咱們再去webpack中配置,在開發中只須要在pages下建立多個目錄便可。
項目默認接入rem適配,會自動把px轉成rem,固然,若是某些地方不想被轉化,有兩種方式:
height: 300Px;
generator-ivweb默認使用builder-webpack4構建,webpack4中所作的一些優化,好比treeShaking都有用到。而且這裏咱們默認給react和react-dom加了外鏈cdn(使用咱們本身的cdn,若是不放心能夠改成本身的cdn)。
內聯語法
好比一些meta標籤,頁面loading等,均可以經過內聯方式引入<!--inline[/assets/inline/meta.html]-->
<script src="amfe-flexible/index.js?__inline"></script>
多樣化配置文件
項目默認集成了gitignore、eslint、editorconfig等配置,爲倉庫管理和開發提供了便捷。
├── .babelrc ├── .editorconfig ├── .eslintrc.js ├── .gitattributes
# 安裝feflow npm install feflow-cli -g # 安裝腳手架 feflow install generator-ivweb # 啓動項目 feflow init
https://github.com/feflow/generator-ivweb, 歡迎你們提issue以便於咱們改進。