[TOC]css
參照mpvue五分鐘上手教程html
# 全局安裝 vue-cli
$ npm install --global vue-cli
# 建立一個基於 mpvue-quickstart 模板的新項目
$ vue init mpvue/mpvue-quickstart my-project
# 安裝依賴
$ cd my-project
$ npm install
# 啓動構建
$ npm run dev
複製代碼
此時,能夠看到新建了一個==dist==文件夾(新的模板多是dist/wx),該目錄就是生成的小程序相關代碼。這時,只須要啓動微信開發者工具,建立小程序項目,並調試便可。vue
項目預覽以下:node
githubwebpack
集中式頁面配置,自動生成各頁面的入口文件,優化目錄結構,支持新增頁面熱更新git
此處有兩種使用方式:github
方式一: 直接使用基於mpvue-entry的模板web
vue init F-loat/mpvue-quickstart my-project
複製代碼
方式二:手動安裝mpvue-entry並修改相關的webpack打包代碼vue-router
# 安裝mpvue-entry
npm i mpvue-entry -D
複製代碼
const MpvueEntry = require('mpvue-entry')
module.exports = {
entry: MpvueEntry.getEntry({
pages: 'src/pages.js',
dist: 'dist/wx/' // 注意!!!!此處的配置應與congig/index.js中的build.assetsRoot保持一致
}),
...
plugins: [
new MpvueEntry(),
...
]
}
複製代碼
// 官方模板生成的項目請務必去除如下配置
module.exports = {
plugins: [
new CopyWebpackPlugin([{
from: '**/*.json',
to: ''
}], {
context: 'src/'
}),
...
]
}
複製代碼
// pages.js
module.exports = [
{
path: 'pages/news/list', // 頁面路徑,同時是 vue 文件相對於 src 的路徑,必填
config: { // 頁面配置,即 page.json 的內容,可選
navigationBarTitleText: '文章列表',
enablePullDownRefresh: true
}
}
]
複製代碼
githubvuex
在 mpvue 中使用 vue-router 兼容的路由寫法
# 安裝
npm i mpvue-router-patch -S
複製代碼
// main.js
import Vue from 'vue'
import MpvueRouterPatch from 'mpvue-router-patch'
Vue.use(MpvueRouterPatch)
複製代碼
// 新建`src/router`文件夾
src
├─router
├─routes.js // 頁面配置,同時用於mpvue-entry的配置
├─components.js // 頁面對應的組件(component)
├─index.js // 整個vue-router的配置
......
複製代碼
// webpack.base.conf.js
// 修改mpvue-entry的配置
module.exports = {
entry: MpvueEntry.getEntry({
pages: 'src/router/routes.js', // 與vue-router共用路由配置
dist: 'dist/wx/'
}),
........
}
複製代碼
至此,咱們能夠在項目中使用 this.$router
和this.$route
對象的方法和屬性了,具體支持哪些方法和屬性,mpvue-router-patch
# 安裝 vuex,使用mpvue模板建立項目時已選了vuex的,此處可省略
npm install vuex --save
# 安裝vuex-persistedstate,使vuex狀態持久化
npm install vuex-persistedstate --save
複製代碼
// 建立src/store文件夾
src
├─store
├─index.js // 組裝模塊並導出store的地方
├─mudule.const.js // 業務常量定義在這裏,這樣就能夠在template、script中同時使用了
├─其餘須要分割的模塊文件
......
複製代碼
// src/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate' // state數據持久化
import appConst from './module.const'
Vue.use(Vuex)
export default new Vuex.Store({
plugins: [
createPersistedState({
paths: [ // 須要被持久化的state
'token'
],
storage: window.sessionStorage // 持久化存儲方式
})
],
state: {
token: '',
counter: 0
},
getters: {},
mutations: {},
actions: {},
modules: {
appConst
}
})
複製代碼
// src/store/module.const.js
// vuex模塊:常量管理
export default {
state: {
ORDER_STATUS_PAID: 'paid'
}
}
複製代碼
// src/main.js
import store from './store/index'
const app = new Vue({
store,
...App
})
複製代碼
Vant Weapp 是有贊移動端組件庫 Vant 的小程序版本,二者基於相同的視覺規範,提供一致的 API 接口,助力開發者快速搭建小程序應用。
step 1 安裝vant weapp組件
# 安裝vant weapp
cd your/path/to/dist
npm init
npm i vant-weapp -S --production
複製代碼
==注意==:此處安裝vant weapp儘可能使用npm安裝,不要用cnpm安裝。由於cnpm安裝會在node_modules目錄中生成_vant-weapp@0.4.7@vant-weapp目錄,這樣去進行第二步的構建npm時,會在miniprogram_npm目錄中生成對應的_vant-weapp@0.4.7@vant-weapp目錄,組件聲明須要寫成這樣:
"usingComponents": {
"van-button": "/miniprogram_npm/_vant-weapp@0.4.7@vant-weapp/button/index"
}
複製代碼
無疑,這樣後期若是須要組件升級的話會是個大麻煩。
step 2 微信開發者工具構建npm
點擊開發者工具中的菜單欄:工具 --> 構建 npm
勾選「使用 npm 模塊」選項:設置-項目設置
此時,會在node_modules父目錄中生成miniprogram_npm
目錄,這就是咱們引用第三方組件的路徑
step 3. 使用vant weapp組件
// app.json或頁面json文件中
"usingComponents": {
"van-button": "/miniprogram_npm/vant-weapp/button/index"
}
複製代碼
// vue中直接使用
<div class="demo-container">
<div class="demo-title">按鈕</div>
<div class="demo-row">
<label><van-button type="default">默認按鈕</van-button></label>
<label><van-button type="primary">主要按鈕</van-button></label>
</div>
<div class="demo-row">
<label><van-button type="warning">警告按鈕</van-button></label>
<label><van-button type="danger">危險按鈕</van-button></label>
</div>
</div
複製代碼
==注意:== 須要修改忽略文件,設置dist/wx/package.json文件爲不忽略文件
#.gitignore
dist/wx/*
!dist/wx/package.json
複製代碼
Fly.js 是一個基於 promise 的,輕量且強大的Javascript http 網絡庫。目前Fly.js支持的平臺包括:Node.js 、微信小程序 、Weex 、React Native 、Quick App 和瀏覽器。
// 安裝
npm install flyio -S
複製代碼
// 建立接口相關的目錄src/api,方便接口統一管理
// 因咱們的程序須要訪問不一樣的業務接口,這些業務接口基礎地址、請求格式、返回格式各有區別
//故建立了不一樣的業務接口模塊,如若接口單1、標準,這裏的多個接口模塊是不須要的
src
├─api
├─index.js // fly對象建立和統一配置
├─branch.js // 不一樣的業務接口模塊
├─order.js
├─其餘業務接口模塊
......
複製代碼
// src/api/index.js
// 注意:小程序須要使用的是flyio/dist/npm/wx;h5須要使用的是flyio/dist/npm/fly
import Fly from 'flyio/dist/npm/wx';
/** * 建立一個默認配置的請求實例 * 對不一樣的接口提供者發起請求時,在對應的業務接口文件中進行具體的配置便可 */
export default function () {
return new Fly();
}
複製代碼
// src/api/branch.js
import createHttp from './index';
let api = createHttp();
api.config.baseURL = 'https://your/api/base/path/'; // 注意:小程序只支持https、wss協議
api.interceptors.response.use(
(response) => {
return response.data;
},
(err) => {
return Promise.resolve(err);
}
)
const getBranchList = function () {
return api.get('/branch.json');
}
export {
getBranchList
}
複製代碼
// 業務代碼XX.vue
import {getBranchList} from '@/api/branch';
// .....
getBranchList().then(data => {
this.branches = data || [];
this.branchesLoading = false;
}).catch(err => {
console.error(err);
this.branchesLoading = false;
})
複製代碼
微信小程序支持大部分的css,可是對於css選擇器支持有限,本項目中已引入vant weapp,css工做量大大減小,所以暫不使用css預處理器。之後有必要引入的時候再來補充吧。
本項目使用了阿里巴巴矢量圖標庫(iconfont)中的Ant Design 官方圖標庫,引入過程以下:
step 1. 選好圖標後下載到本地
step 2. 將下載的代碼中的iconfont.css
和 iconfont.ttf
拷貝到項目中的src/style/icon下
step 3. 修改iconfont.css文件,定義字體的部分src只保留ttf就好
/*iconfont.css*/
@font-face {font-family: "iconfont";
src: url('iconfont.ttf?t=1543540389274') format('truetype'); /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
}
.iconfont {
font-family:"iconfont" !important;
font-size:25px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-minus-circle-fill:before { content: "\e844"; }
.icon-plus-circle-fill:before { content: "\e845"; }
複製代碼
step 4. 使用
<icon class="iconfont icon-minus-circle-fill" style="font-size: 40px;color: #ccc"></icon>
複製代碼
==備註==:網上說的下載的字體文件須要轉base64不知是爲什麼,目前沒轉換,在開發者工具中沒有問題,之後有問題的話再來補充。
wx模塊化
將wx對象模塊化,給之後的h5留坑
打包代碼調整
主要有兩點調整
原打包代碼 npm run dev
和 npm run build
都將小程序的代碼編譯到了dist文件夾,不便於區分,調整後將調試代碼編譯到dist文件夾,生產環境代碼打包到weapp文件夾
在npm run build
時將dist/miniprogram_npm
代碼拷貝到weapp,用來支持小程序對第三方包的依賴。
通過以上工做後,總體目錄結構以下:
mall
├─build // 構建程序
├─congfig // 環境配置
├─dist // 小程序代碼(調試代碼)
├─wx
├─......
├─mpvue編譯後的小程序代碼
├─......
├─miniprogram_npm // 小程序依賴
├─package.json
├─src
├─api // 接口
├─components // 組件
├─config // 配置參數
├─params.js
├─pages // 頁面
├─router // 路由
├─store // vuex
├─style // 全局樣式
├─icon
├─iconfont.css
├─iconfont.ttf
├─common.css
├─utils // 工具方法
├─index.js
├─wx.js
├─app.json
├─App.vue
├─main.js
├─static // 靜態資源
├─weapp // 小程序代碼(生產環境)
├─index.html
├─package.json
├─......
複製代碼