Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

rickchen發表於2018-01-09

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

線上地址:fancy.czero.cn

手機掃描二維碼檢視:

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

點選下載安卓apk安裝包

原始碼地址:github.com/czero1995/f…

專案主架構

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

使用的庫

  • vue-cli (vue+webpack腳手架)
  • vue-router(路由跳轉)
  • vuex(狀態管理)
  • axios(資料請求)
  • mock.js(模擬後臺資料)
  • vue-touch(手勢判斷)
  • fastclick(解決移動端瀏覽器 300 毫秒點選延遲問題)
  • vue-lazyload(圖片懶載入)
  • swiper(輪播)

設計佈局:

  • HTML5
  • CSS3
  • Less
  • rem(阿里用的那套rem演算法)
  • Flex(彈性佈局)
  • vue-touch(用於實現購物車左滑刪除功能) *動畫(vue原生transition實現原生app的效果)

資料請求:

  • Mock(模擬後臺資料)
  • Axios(請求資料)

邏輯互動:

  • vue(資料渲染,各個元件間的數值傳遞)
  • vue-router(元件間的路由跳轉)
  • vuex(全域性狀態的管理)

除錯

  • vConsole(在移動端檢視偵錯程式)

優化方案:

  • 騰訊智圖(壓縮圖片,減少圖片的體積)
  • vue-lazyload(圖片懶載入,緩解載入資料,提高網頁效能)
  • fastclick(解決移動端300ms延遲,提高頁面互動流暢度)
  • vue-rouer(路由懶載入,分離app的js為多個js檔案,到對應的頁面再執行對應的js)
  • webpack(config/index.js檔案內的productionSourceMap改為false,這樣打包出來的檔案可以沒有.map結尾的js檔案,且檔案體積減少至少一半)

Vuex重新整理儲存狀態

使用Vuex做狀態管理的時候,當使用者重新整理頁面,Vuex裡面的狀態會全部丟失,從而引起程式的一場。解決思路是在creared()鉤子函式裡面新增以下方法:

created(){
   console.log('頁面執行重新整理時,儲存Vuex的狀態到LocalStorage')
    //在頁面載入時讀取localStorage裡的狀態資訊
    localStorage.getItem("userMsg") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("userMsg"))));
    
    //在頁面重新整理時將vuex裡的資訊儲存到localStorage裡
    window.addEventListener("beforeunload",()=>{
        localStorage.setItem("userMsg",JSON.stringify(this.$store.state))
    })
  }  
複製程式碼

上面程式碼的原理是,當頁面重新整理時,會將當前Vuex的狀態儲存到LocalStorage裡面,重新整理成功,再從LocalStorage賦值到Vuex裡面.

實現細節

媲美原生的頁面前進和後退的動畫實現:

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

  • 指定transition:name

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

  • 在data中宣告預設的進出動畫

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

  • 在mounted()資料渲染初始化完成之後進行判斷

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

  • 拿到vuex的狀態值

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

  • 然後進行判斷

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

  • 最後將當前的元件名字傳給vuex,實現不同的元件進去就有不同的切換動畫。

下一頁動畫

.slide-go-enter-active,
.slide-go-leave-active {
    transition: all .5s;
    opacity: .8;
}

.slide-go-enter,
.slide-go-leave-to {
    transition: all .5s;
    transform: translate3d(100%, 0, 0);
    opacity: .8;
}
複製程式碼

返回上一頁動畫

.slide-back-enter-active,
.slide-back-leave-active {
    transition: all .5s;
}

.slide-back-enter,
.slide-back-leave-to {
    transition: all .5s;
    transform: translate3d(-100%, 0, 0);
}
複製程式碼

購物車左滑刪除

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

v-touch

在css中設定好刪除按鈕的偏移量

-webkit-transform: translate(-12%, 0);
-webkit-transition: all 0.3s linear;
複製程式碼

左右滑方法

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

滑動的時候觸發select樣式,進行繫結

讓當前的列表項==購物車的列表,樣式會被啟用,出現左滑刪除

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。
Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

注意頁面的盒子使用盒子之後會和原生頁面出現衝突,導致滑動不流暢
因此,需要在main.js指定預設的滑動方式為橫向滑動觸發
複製程式碼

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

訂單頁面,點選頂部導航和左右滑動進行元件的切換以及動畫樣式的判斷

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

也是使用的v-touch元件,實現方式和元件切換類似。 我給每個訂單狀態的元件一個不同的數字,根據這個數字,判斷元件是左滑動的動畫還是又滑動的動畫

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。
Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

Vue-cli開啟PWA(Service Worker)和引入骨架屏

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

參考文章:

github.com/czero1995/v…

zhuanlan.zhihu.com/p/37408373

持續整合服務 Travis CI

利用Travis CI,監聽Github專案master,一旦檢測到master有程式碼變動,自動執行指令碼,並把編譯打包完成的專案自動傳送部署到伺服器,不用再像以前一樣,需要ssh登入到伺服器,再執行git pull操作。 本地新增.travis.yml

language: node_js
node_js:
- 8
branchs:
  only:
  - master
before_install:
- openssl aes-256-cbc -K $encrypted_87bf11d507f0_key -iv $encrypted_87bf11d507f0_iv
  -in id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
- echo -e "Host 47.98.240.154\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
script:
- npm install cnpm --registry=https://registry.npm.taobao.org
- cnpm install
- npm run build
- scp -r dist root@47.98.240.154:/var/www/html/fancy
- 
複製程式碼

遇到了很多的坑,失敗了無數次,終於知道問題所在:

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

生產環境錯誤監控

sentry是國外開源的錯誤監控庫,有線上環境,也可以部署到自己的伺服器,可以跟蹤錯誤出現的步驟和錯誤的詳細資訊,方便開發人員進行快速定位。

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

免費升級到HTTPS

升級到https後,伺服器可以開啟http2.0版本,對比http1.x效能和快取各方面要更好,還有其他新特性, 可以啟動service work功能,更好的進行離線快取,更好的離線體驗。 HTTPS證書可以免費申請,阿里雲跟騰訊雲都可以申請,按照文件指示進行申請下載,然後將下載的證書上傳到伺服器,配置伺服器的內容,就可以開啟https、http2.0、service work等功能了。

Vue全家桶商城全站升級之引入HTTPS,PWA,錯誤監控,持續構建。

專案程式碼已經都做好註釋,可以直接檢視原始碼,點選這裡

使用說明

#克隆專案
git clone https://github.com/czero1995/fancy-store.git

# 安裝依賴
npm install

# DLL構建庫(提高打包和編譯的速度)
npm run dll

# 本地開發環境 訪問http://localhost:8080
npm run dev

# 構建生產
npm run build
複製程式碼

相關文章