前言
作為一個專業踩坑各種小程式框架(原生,wepy,web-view)的前端小白鼠來說,第一次見到mpvue還是蠻興奮的,畢竟可以無縫對接Vue,大大降低了小程式的學習成本.綜合對比一下幾個框架的優劣,毫不猶豫的選擇了mpvue來開發小程式,下面是我的踩坑指南,不正確的地方,希望大家斧正.
踩坑指南
1.Cannot assign to read only property 'exports' of object '#<Object>'
編譯報錯
這是因為引用第三方外掛的時候,帶入了module.exports
的寫法,webpack可以使用require和export ,但是不能混合使用import 和module.exports
,你需要做的是更新根目錄下的.babelrc
檔案配置
vue引入外掛Cannot assign to read only property 'exports' of object
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": [
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["istanbul"]
}
}
}
複製程式碼
2.掛載在Vue.prototype上的屬性,在模板語法裡面是undefined,必須經過computed計算過一下才能用。via@noahlam
import config from './config'
Vue.prototype.$serverPath = config.serverPath
複製程式碼
在頁面中這樣使用
<img :src="$serverPath + 'logo.png'" />
複製程式碼
編譯之後會變成這樣的情況
<image src="undefinedlogo.png" ></image>
複製程式碼
你需要做的是,在每個使用的頁面computed裡面返回this.$serverPath
3.相對路徑的圖片不顯示,比如
<img src="../../images/LOGO.png">
複製程式碼
解決是:把路徑import
進來,或者是把圖片放在static
目錄下引用,然而作為css background-image
引用時,只能選擇引用遠端圖片,或者相對目錄小於8k(webpck配置有關)的圖片,不然編譯器會報錯
<template>
<div>
<div class="test"></div>
<img :src="imgUrl">
</div>
</template>
<style>
.test{
width: 48rpx;
height: 48rpx;
background-image: url("../../img/a.png");
}
</style>
<script>
import imgUrl from '@/img/a.png'
export default {
data() {
return {
imgUrl
}
}
</script>
複製程式碼
4.子元件資料檢測的問題
比如我在某個頁面引用了這樣的一個元件,繫結資料myOrderList
,同時我引入了vuex來做狀態管理,管理myOrderList
物件
### A頁面中
<order :isEnd="isEnd" :orderList="myOrderList"></order>
### B頁面中更新"myOrderList"物件
this.$store.commit('updateList', {data: this.orderList});
複製程式碼
當A頁面再次顯示的時候,子元件的資料流沒有更新,列印myOrderList
物件都有更新.我的解決辦法是,先把myOrderList賦值為空,然後再次賦值store.state中的物件,問題就解決了.估計是mpvue的資料檢測機制有問題,說得不對的地方希望大佬們斧正.
5.原生元件引入的問題,參考在mpvue 使用 echarts 小程式元件,官方的文件已經很詳細了,我這邊說幾個要點:
- ready 為非同步獲取資料。
- 為 init 新增接收 options 傳參
- page目錄下main.js需要新增
usingComponents: {'ec-canvas': '../../../static/ec-canvas/ec-canvas'}
- 需要放在static目錄下
第一條和第二條尤為重要,大家切記
總結
畢竟一個框架剛剛出來,有各種各樣的坑,希望大家多多給官方提PR和Issues.