基于Vue技術(shù)棧,小程序跨端框架選型

支持各平臺(tái)小程序項(xiàng)目,包括微信、支付寶、百度小程序項(xiàng)目;實(shí)現(xiàn)一套代碼在多個(gè)平臺(tái)使用,降低開(kāi)發(fā)成本。

基于Vue技術(shù)棧,社區(qū)目前較完善的框架有mpVue官方、Megalo官方Chameleon官方

mpVue特點(diǎn):

  • 基于@vue-cli腳手架創(chuàng)建的項(xiàng)目
  • 通過(guò)webpack構(gòu)建打包,多環(huán)境配置麻煩
  • 不支持vue-router,支持vuex數(shù)據(jù)管理
  • vue語(yǔ)法特性支持不足
  • 兼容小程序生命周期,不建議使用小程序的生命周期鉤子
  • webpack/dev-server.js文件實(shí)現(xiàn)熱更新,觸發(fā)小程序的調(diào)試工具檢測(cè)文件變化
  • 保留vue.runtime核心方法,vue實(shí)例直接與小程序page實(shí)例建立關(guān)聯(lián)以及生命周期的綁定,vue實(shí)例掛載的時(shí)候把vue屬性同步到對(duì)應(yīng)的小程序?qū)嵗?。利用發(fā)布訂閱模式Observer,Watcher監(jiān)聽(tīng)數(shù)據(jù)更新;并在小程序生命周期中觸發(fā)vue的生命周期
image.png

目錄結(jié)構(gòu)

├── package.json
├── project.config.json       
├── static            
├── src
│    ├── components
│    ├── pages // 需要遵循每個(gè)小程序頁(yè)面放入一個(gè)單獨(dú)子目錄的形式
│    ├── utils
│    ├── App.vue
│    ├── store // 狀態(tài)管理
│    └── main.js // main.js+App.vue:為入口文件,相當(dāng)于原生小程序的app.json和app.js的復(fù)合體
├── config // 包含不同環(huán)境的配置信息,環(huán)境、api域名等
│   ├── index.js
│   ├── dev.env.js
│   └── prod.env.js
└── build

megalo特點(diǎn):

  • 基于@vue/cli3腳手架創(chuàng)建的項(xiàng)目
  • 支持多環(huán)境,多模式,配置簡(jiǎn)易
  • 不支持vue-router,支持vuex數(shù)據(jù)管理
  • vue語(yǔ)法特性支持完善
  • 兼容小程序生命周期
  • api統(tǒng)一插件megalo-api,支持promise,但是不兼容全部平臺(tái)API,需要手動(dòng)處理
  • megalo-cli-service 插件包含開(kāi)發(fā)環(huán)境運(yùn)行、監(jiān)聽(tīng)、生產(chǎn)環(huán)境打包
  • 支持頁(yè)面.vue和.js的合并書(shū)寫(xiě),增加<config>標(biāo)簽
  • vue單文件的模版和style都可以通過(guò)指定platform做跨平臺(tái)兼容
  • 支持js文件的跨平臺(tái)兼容(index.wechat.js / index.swan.js / index.alipay.js)
  • 邏輯和模版分別在service和view中執(zhí)行,之間不具備共享數(shù)據(jù)通道。當(dāng) Vue 的 vm 上數(shù)據(jù)發(fā)生更新時(shí),會(huì)重新渲染出 vdom,在的 patch 階段,框架不在去操作 DOM,而是通過(guò) Page 上的setDate方法將變化的數(shù)據(jù)更新到視圖層,完成 Vue 和 小程序的視圖更新。
image.png

目錄結(jié)構(gòu)

├── dist-*
│    ├── project.config.json // 工具配置
├── package.json
├── .env.development
├── .env.production
├── src
│    ├── components
│    ├── pages
│    ├── subPackage
│    ├── store
│    ├── static  
│    ├── App.vue
│    └── main.js // app.json和app.js的匯總文件,小程序全局配置
└── build

vue特性支持情況對(duì)比

image.png

總體上來(lái)說(shuō),二者都是大大降低了開(kāi)發(fā)成本,megalo基于mpvue做了進(jìn)一步優(yōu)化,且兼容vue版本的升級(jí),貼近vue技術(shù)棧業(yè)務(wù)的開(kāi)發(fā)規(guī)范,當(dāng)然megalo作為后起之秀會(huì)存在更多的坑,需要我們?cè)趯?shí)際開(kāi)發(fā)中手動(dòng)填坑??,當(dāng)然后續(xù)我們也會(huì)做更多的賦能,減少開(kāi)發(fā)同學(xué)的煩惱 ??

附Chameleon調(diào)研:

  • CML新語(yǔ)言,類(lèi)Vue,原有項(xiàng)目遷移困難,學(xué)習(xí)成本較高
  • 編譯時(shí)使用自研多態(tài)協(xié)議(定義標(biāo)準(zhǔn)接口,除統(tǒng)一組件外,各端模塊各端獨(dú)立實(shí)現(xiàn),例如登錄),包括兼容H5
  • 內(nèi)置的組件和API,原生組件和H5組件導(dǎo)出引用
  • 支持vue的周邊 包括router
  • 獨(dú)立的語(yǔ)法檢查工具
  • 優(yōu)化編譯速度、打包性能、包大?。o(wú)真實(shí)數(shù)據(jù))
  • 需要重新定制ui框架

主要問(wèn)題是遷移和學(xué)習(xí)成本過(guò)高

參考文件: https://juejin.im/post/5bd2b014e51d457a7a0396ea

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在尤大微博鋪墊著“將會(huì)引入一些關(guān)于 TypeScript 的改進(jìn)”一周之后,代號(hào)為 Level E 的 Vue.j...
    極樂(lè)叔閱讀 15,780評(píng)論 0 12
  • 前言: mpvue ,這是一個(gè)使用Vue.js開(kāi)發(fā)小程序的前端框架。使用此框架,開(kāi)發(fā)者將得到完整的 Vue.js ...
    90后的思維閱讀 5,386評(píng)論 0 13
  • 一:什么是閉包?閉包的用處? (1)閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。在本質(zhì)上,閉包就 是將函數(shù)內(nèi)部和函數(shù)外...
    xuguibin閱讀 10,068評(píng)論 1 52
  • 使用手冊(cè) mpvue繼承自Vue.js,其技術(shù)規(guī)范和語(yǔ)法特點(diǎn)與Vue.js保持一致。 本文檔適用于有一定Vue.j...
    眼鏡蛇閱讀 2,258評(píng)論 0 0
  • 早上6點(diǎn)鬧鐘響了,繼續(xù)瞇糊一會(huì),沒(méi)想到,竟然有人敲門(mén),我睡眼惺忪的開(kāi)門(mén)一看,是個(gè)白晰的胖女人,張口就沖了我一句...
    木木_00d1閱讀 545評(píng)論 8 1

友情鏈接更多精彩內(nèi)容