完美使用mpvue搭建小程序框架

mpvue

美团开源了mpvue这个项目,使得我们又多了一种用来开发小程序的框架选项。由于mpvue框架是完全基于Vue框架的(重写了其runtimecompiler),因此在用法上面是高度和Vue一致的(某些功能由于受限于小程序环境本身的原因而不能使用),这给使用过Vue开发Web应用的前端开发者提供了极低的切换门槛来开发小程序。

mpvue

Vue.js 小程序版, fork 自 vuejs/vue@2.4.1,保留了 vue runtime 能力,添加了小程序平台的支持。

mpvue 是一个使用 Vue.js 开发小程序的前端框架,目前支持 微信小程序百度智能小程序头条小程序支付宝小程序。 框架基于 Vue.js,修改了的运行时框架 runtime 和代码编译器 compiler 实现,使其可运行在小程序环境中,从而为小程序开发引入了 Vue.js 开发体验。

名称由来

  • mp:mini program 的缩写
  • mpvue:Vue.js in mini program

主要特性

使用 mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力:

  • 彻底的组件化开发能力:提高代码复用性
  • 完整的 Vue.js 开发体验
  • 方便的 Vuex 数据管理方案:方便构建复杂应用
  • 快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload
  • 支持使用 npm 外部依赖
  • 使用 Vue.js 命令行工具 vue-cli 快速初始化项目
  • H5 代码转换编译成小程序目标代码的能力

其它特性正在等着你去探索。

配套设施

mpvue 作为小程序版本的 Vue.js,在框架 SDK 之外,完整的技术体系还包括如下设施。

通过官网提供的五分钟快速上手教程,可以发现它的开发过程和Vue保持高度一致,连使用的命令行工具也还是原先开发Web应用时所用的vue-cli

搭建步骤

一、开发环境Node.js

现代前端开发框架和环境都是需要 Node.js 的,如果没有的话,请先下载 nodejs 并安装。
安装完成后,打开你的命令行输入如下命令,验证安装是否成功:

node --version
v8.1.2
npm --version
5.0.3

然后,我们需要执行以下命令,将npm的下载源切换到国内淘宝的镜像,以提高下载时的速度和成功率:

npm set registry https://registry.npm.taobao.org/

但是我电脑上用的不是npm,而是yarn,因为yarn相比npm使用更方便,快速,安装yarn可以参考
Npm vs Yarn 之备忘详单
yarn官方文档
JavaScript 包管理工具 yarn 的使用
安装完成后,打开你的命令行输入如下命令,验证安装是否成功:

yarn --version
1.3.2
二、开发环境vue-cli
npm install vue-cli -g

提示许可被拒绝, 想起来了昨天启动时的权限问题, 试探性在命令前面加上了sudo, 结果可行:

sudo cnpm install --global vue-cli

安装成功, 查询下版本:

vue -V
2.9.2
三、开始创建项目
vue init mpvue/mpvue-quickstart mpvueTest
终端图片

现在mpvue的模板代码已经生成,现在还不能运行,需要
cd到项目目录下
执行

yarn

进行安装第三方库,安装完成之后,执行

yarn dev

这样就可以运行起来了

四、搭建小程序的开发环境

小程序自己有一个专门的微信开发者工具最新版本下载地址
这一步比较简单,按照提示一步步安装好就行,然后用微信扫描二维码登陆。 至此小程序的开发环境差不多完成。

微信开发者工具导入项目

打开之后,就会看到我们新建的小程序页面


小程序页面

至此我们这个基本mpvue小程序框架已经搭建完成

但是这个只是最基本的框架,对于我们正在做项目还是不够的,需要在进行完善

五、加入常用第三方库

需要引入一些项目需要的基本第三方库,下面是我们项目目前用到的库,打开项目的package.json,加入一下内容,

  "dependencies": {
    "mpvue": "^2.0.0",
    "vuex": "^3.0.1",
    "weapp-qrcode": "^0.9.0",
    "flyio": "^0.5.9",
    "install": "^0.12.2",
    "mp-weui": "^1.0.3",
    "mpvue-zanui": "^1.0.2",
    "common-mpvue": "^0.4.6",
    "mpvue-config-loader": "^0.1.3"
  },

cd到项目目录下,执行一下命令

yarn

这些第三方库下载到我们的项目中,然后打开项目的main.js引入一些第三方。

import Vue from 'vue'
import App from './App'
import store from '@/store';
import WeUI from 'mp-weui/packages';

Vue.use(WeUI);
Vue.config.productionTip = false
App.mpType = 'app'

const app = new Vue({
    store,
    ...App
});
app.$mount();
提醒tips1:

还有一个我搭建时候需要的坑,就是新版本的mpvue,不能在main.js里面配置小程序的config,我们之前的项目都是在main.js里面进行配置,但是我昨天进行配置,发现不可以配置了,在网上寻找答案,最终发现不支持了在main.js里面配置,在项目的main.json里面进行配置

提醒tips2:

还有就是之前项目的每个页面的配置也是在页面的main.js里面进行配置,现在这个也不支持了,需要在页面下面的main.json里面进行配置,如下所示

{
    "navigationBarTitleText": "页面标题",
    "enablePullDownRefresh": true
}
六、加入常用方法

在项目utils目录下的index.js加入一些常用的方法

// /**
//  * 获取storage
//  */
export function getCache(key) {
  var value = wx.getStorageSync(key)
  if (value) {
    return value
  }
  return ""
}

// /**
//  * 删除storage
//  */
export function removeCache(key) {
  wx.removeStorage(key);
}

/**
 * 存储storage
 */
export function setCache(key, value) {
  try {
    wx.setStorageSync(key, value)
  } catch (e) { }
}

/**
  获取url参数
 */
export function getUrlParam(path) {
  var result = {},
    param = /([^?=&]+)=([^&]+)/gi,
    match;
  while ((match = param.exec(path)) != null) {
    result[match[1]] = match[2];
  }
  return result;
}

/**
  数组是否包含某个字符串
 */
export const carrContainStr = (a, obj) => {
  for (var i = 0; i < a.length; i++) {
    if (a[i] == obj) {
      return i;
    }
  }
  return -1;
}


/**
   克隆
 */
export const clone = (obj) => {
  // Handle the 3 simple types, and null or undefined
  if (null == obj || "object" != typeof obj) return obj;

  // Handle Date
  if (obj instanceof Date) {
    var copy = new Date();
    copy.setTime(obj.getTime());
    return copy;
  }

  // Handle Array
  if (obj instanceof Array) {
    var copy = [];
    for (var i = 0, len = obj.length; i < len; ++i) {
      copy[i] = clone(obj[i]);
    }
    return copy;
  }

  // Handle Object
  if (obj instanceof Object) {
    var copy = {};
    for (var attr in obj) {
      if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
    }
    return copy;
  }

  throw new Error("Unable to copy obj! Its type isn't supported.");
}


/**
   判断机型
 */
export const isiOS = () => {
  var u = navigator.userAgent;
  var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
  var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
  if (isiOS) {
    return true
  }
  return false;
}
七、vuex

这块我就不细说了,大家可以参考下面的进行在项目里进行配置
vuex官网
VueJS中学习使用Vuex详解
vuex的简单介绍
我对vuex的理解(二) 之 mapGetters取值和mapMutations的传参

八、分装网络请求

可以看一下我的下一篇文档小程序中使用flyio封装网络请求

至此特别感谢一斤代码-------->一斤代码的简书,他写了很多mpvue小程序的文档,从搭建到使用,写的很详细,大家可以去学习观摩一下😆。

参考:
mpvue官网
一斤代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容