基於Vue和Express框架寫的一個全棧購物商城,記錄項目過程當中遇到的一些問題以及經驗和技巧。css
基於Vue-CLI2.0:點我查看html
這個分支版本是一兩年前的,基於Vue-CLI2.0寫的,數據請求是Mock,純前端的項目。
前端
基於 Vue-CLI3.0:點我查看vue
這個分支版本是基於Vue-CLI3.0的,將腳手架從2.0遷移升級到了3.0,遇到的一些問題和坑也都填完了~也是純Web端Mock模擬數據的項目。
ios
當前版本:點我查看git
基於Vue-CLI3.0,前端用Vue全家桶,後端用Express+MongoDB+Redis,後臺管理系統CMS是用的Vue-Element-Admin
github
在線預覽:www.fancystore.cn vue-router
手機直接掃描二維碼真機體驗:項目代碼px自動轉換爲rem,須要在main.js中引入amfe-flexible庫vuex
Vant UI庫也有REM單位,須要在vue.config.js中配置: vue-cli
單頁(SPA)SEO是一個痛點,目前有兩種方式,一種是SSR,一種是預渲染(PrerenderSPAPlugin)。
這個項目是用預渲染(PrerenderSPAPlugin)+vue-meta-info這兩個庫來作SEO優化的。
將rouer.js模式改成mode:history
下載安裝PrerenderSPAPlugin
PrerenderSPAPlugin是Google的一個庫,基於Chromium是獲取數據,安裝PrerenderSPAPlugin的時候會自動下載Chromium瀏覽器,國內npm安裝Chromium會常常安裝失敗,建議用淘寶的cnpm安裝
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install PrerenderSPAPlugin --save
複製代碼
在vue.config.js中引入PrerenderSPAPlugin,配置須要預渲染的路由。
下載安裝 vue-meta-info
在main.js中引入vue-meta-info,在每一個頁面配置meta信息,這樣每一個單頁路由都有不一樣的title,理由爬蟲引擎抓取重要內容,利於SEO。
預渲染前只有一個index.html,預渲染後最後打包出來的預渲染目錄文件以下:
項目中會使用keep-alive會提升用戶體驗和網站的性能,若是想實現部分頁面緩存,部分頁面不須要緩存,能夠在router.js裏面的路由添加meta.keepalive在跟router-vier加入判斷:
用Vuex管理全局的狀態,會遇到刷新頁面的時候全部的狀態丟失或者重置,能夠在App.vue的鉤子函數添加代碼,會在頁面刷新的時候將Vuex存儲到Storage中,刷新完成後又再從Storage取出來存到Vuex裏面:
封裝Axios,添加Axios請求(request)和相應(response),統一處理錯誤信息或者登陸認證的消息,全部的數據請求都存放到api目錄下,對應的頁面方便後續的維護和管理。
區分開發環境和生產環境
alias的方式直接指定目錄。
CDN
生產環境中將一些共有庫Vue,vuex,vue-router等庫不打包到項目中,而是經過CDN的方式引入這些共有庫,這樣能夠減小項目的大小,也能夠藉助CDN的優點,讓網站加載更快。推薦一個強大的cdn庫:[https://www.bootcdn.cn/](https://www.bootcdn.cn/)
生產環境壓縮和出去console打印日誌
生產環境開啓gzip壓縮
生產環境啓用預渲染
生產環境分離css,外鏈CSS能夠緩存
集成Sentry開源日誌監控系統,在官網註冊獲取key,在main.js中引入RavenVue並配置便可
Github自動構建和持續集成基於Travis
登陸Travis選擇須要持續集成的項目。
在.travis.yml寫上相應的config,服務器配置ssh_key,
每次代碼push到指定分支(好比master)的時候,Travis會自動執行項目上的.travis.yml文件,開始自動構建,構建成功經過scp密令傳送到服務器,完成自動部署的功能。
每次須要發版,只須要push代碼,而後去喝杯咖啡,回來就已經構建發佈完成,解放勞動力
團隊合做的時候,每一個成員用的編輯器不一樣,縮進格式也不一樣,這樣合併代碼的時候會出現各類意外的狀況,團隊統一編輯器和編輯器不太現實,由於每一個人的寫代碼習慣和風格不一致。能夠藉助husky 和 link-stage,每次commit的時候都會安裝配置的規則格式化代碼,參考文章:segmentfault.com/a/119000000…
用Session認證機制,來實現登陸登出。 配置Session的加密解密,將Session存儲到Redis,提升性能,若是有多臺服務器,Redis能夠共享Session。
有些API請求是須要用戶登陸才能夠訪問的,能夠寫中間件來判斷:
有些API的請求是須要判斷用戶是否有權限,好比添加、刪除和更新,會在中間件判斷是否有權限
配合後端作了權限系統,根據用戶的權限來展現和隱藏菜單和按鈕。
後臺管理CMS: github.com/czero1995/f…