本文不介紹原理,只安利我在公司中使用的webpack4搭建的多頁面腳手架,拿來即用。
多頁面,可以是傳統的jq,zepto寫的頁面,也可以是vue,react寫的,可擴充套件性較高。本gituhub倉庫只針對.js做處理,沒有對.vue,.jsx做處理,如需要,請自行新增。程式碼倉庫
下面針對覆蓋的做簡單介紹,對需要注意對做重點介紹。(專案目錄不是最優,因為都是老的專案,由於一些頁面地址已經在客戶端寫死,沒有處理目錄結構)
目錄結構
原始碼目錄結構
重點目錄說明
config下是關於開發環境代理介面,及入口函式和開發伺服器配置
script下是開發環境webpack打包的入口配置檔案
mock下是mock服務的相關配置和介面的檔案,如攔截到mock下有介面直接請求mock下的介面。沒有相應介面,直接走代理伺服器介面
src下是原始碼
webpack.plguins.js是關於webpack外掛的配置
webpack.rules.js是關於loader的相關配置
其他檔案應該一目瞭然了
其他
1.webpack4打包注意點
webpack已js為入口,我們傳統頁面是在src下建.html檔案,這裡面就做了個已src/*.html 遍歷,存入陣列,然後在src/js下必須要有相應的檔名.js 即使是一個簡單的html沒有js,也需要新建相應js檔案。
也可以在遍歷時候,如果有ts,不拼接.js,
entryObj[item] = path.resolve(__dirname, 'src/js', item)
複製程式碼
在resolve 增加extensions: ['.ts', '.tsx', '.js'],
如果是開發環境,則入口多加mock服務,和一個渲染src/*.html列表的入口
if (devMode) { config.entry.mock = path.resolve(__dirname, 'mock/index.js') config.entry.index = path.resolve(__dirname, 'config/indexEntry.js')}複製程式碼
plugin相關配置
html相關處理
使用,開發環境...htmpConf(['mock', 'rem']),生產...htmpConf([ 'rem'])
css分離外掛老的extract-text-webpack-plugin已經不相容webpack4,需使用mini-css-extract-plugin,而且可以打包出contenthash,效能較好
命令中傳引數使用了個外掛cross-env
loader處理沒特殊的,css開發環境不分離,生產分離
dev環境伺服器配置
dev環境用node去啟用,需用到require('webpack-dev-server').addDevServerEntrypoints方法。
lib下和asset下存放copy檔案。我們專案zepto不作為公用,所以在html檔案中需手動引入(考慮到有的純靜態頁)
其他不清楚,詳見原始碼。
2.代理服務
代理其實很簡單就webpack-dev-server配置proxy,還可以注入相關token,header等等
onProxyReq: function (proxyReq, req, res) { proxyReq.setHeader('cookie', proxyConfig.config[PROXY_ENV]['cookie']) }複製程式碼
3.mock服務
當命令列配置IS_MOCK=true時候開啟,然後在dev環境多注入入口,在html外掛中也加入相關chunk即可,手動更改插入chunk順序設定chunksSortMode: 'manual',然後編寫mock服務即可,詳細使用可以參考官網,簡單到使用可以參照為我的readme
4.eslint規範
{ test: /\.js$/, use: [ 'babel-loader', { loader: 'eslint-loader', options: { formatter: require('eslint-friendly-formatter') // 預設的錯誤提示方式 } } ], exclude: '/node_modules/' },複製程式碼
詳細配置在.eslintrc.js,本倉庫參照standard標準。一些關於全域性到jq,$,可以配置true,eslint則不拋錯
"globals":{ $: true, Zepto: true, IS_MOCK: true, INDEX_LIST: true },複製程式碼
一些exlint命令
eslint --fix src // 修正src下面的.js檔案格式錯誤(會自動調整檔案)
5.git提交資訊規範化
推薦commitizen外掛,可以規範專案中每個人的使用規範,本倉庫也配置了,只需要npm i commitizen -g,在程式碼提交時候,git commit -'xxx'替換為git cz,則可以按照外掛規範,互動式的提交。
關於commitizen快速使用,詳細參照相關文件
step1:npm i commitizen -g
step2:commitizen init cz-conventional-changelog --save --save-exact