美文网首页给自己
使用mpvue开发小程序

使用mpvue开发小程序

作者: 威少带我砍三双 | 来源:发表于2018-12-04 22:20 被阅读0次

    demo github地址: https://github.com/zkl904/mpvueFX.git

    注意:这里用的小程序平台的网址用的是我个人的账号链接, 所以登录的时候会要求重新登录, 使用自己的账号即可

    1: 小程序账号的注册

    小程序文档地址: https://mp.weixin.qq.com/debug/wxadoc/dev/index.html

    小程序平台登陆: https://mp.weixin.qq.com/

    小程序开发者工具下载; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

    获取appid 以及 appsecret: https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=674021264&lang=zh_CN

    1.1步骤:

    1. 先申请一个小程序账号
    3个 步骤: 账号信息 => 邮箱激活 => 信息登陆

    1.png

    这三个步骤填写完成后 进入小程序平台,

    1. 填好小程序信息

    image.png

    2. 添加相应的开发者


    image.png

    2. 下载好开发者工具

    小程序开发者工具下载; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

    3. 使用mpvue 进行小程序的开发

    vue官网: https://cn.vuejs.org/

    mpvue官网: http://mpvue.com/

    mpvue项目合集: https://github.com/Meituan-Dianping/mpvue/issues/21

    mpvue中出现的一些问题以及相应的解决方法: https://github.com/Meituan-Dianping/mpvue/issues

    mpvue组件工具合集: https://github.com/mpvue/awesome-mpvue

    注: 使用mpvue 需要一定的vue基础 , 开始使用之前最好先熟悉一些vue相关的一些语法

    原生开发小程序 和 wepy 、 mpvue 对比


    image.png

    整体来说, 使用mpvue来开发小程序学习成本是最低的

    3.1 开始搭建mpvue项目

    (1): 若是之前没有安装过vue-cli , 先安装vue-cli
    (2): 开始创建mpvue 项目

    $ npm install -g vue-cli  // 全局安装vue-cli
    $ vue init mpvue/mpvue-quickstart my-project  // 快速生成项目模版
    
    image.png

    其中appid查看 :


    image.png

    这样就建好了一个项目快速启动模板

    (3): 安装相应的插件

    (4): 编译一下文件 , 生成一个dist 文件, 小程序使用的代码就是这里的dist代码

    $ npm install   // 安装相应的插件
    $ npm run dev  // 编译生成一个dist文件
    

    注: 项目拉下来之后记得先编译一下 , 生成dist 文件

    image.png

    关于微信开发者工具的使用: https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html

    3.2 上传代码功能

    上传完代码之后可以在 https://mp.weixin.qq.com/wxopen/wacodepage?action=getcodepage&token=194289795&lang=zh_CN 中看到

    image.png
    image.png

    注: 这里的开发版本 只会有一个 , 之前有的 会被后上的给顶掉

    3.3 编写一个简单的小程序页面

    首先是页面的结构 :


    image.png

    注: 一个页面上有三个配置 , 分别是 xx.json xx.vue main.js 其中xx.json 是页面配置文件 , xx.vue 是页面的主代码 , main.js 是页面的入口文件 ,三个文件组成一个完整的页面 , 而且每次新增一个页面都必须要重新 npm run dev 一下重新编译dist文件 , 十分的不方便, 后面使用mpvue-entry 和 mpvue-router-patch来整合和简洁化页面

    3.3.1 安装stylus 和 stylus-loader

    可以使用stylus 来编写css
    stylus文档: https://www.zhangxinxu.com/jq/stylus/

    $ npm install stylus --save-dev
    $ npm install stylus-loader --save-dev
    

    验证下是否可以使用stylus , 在style标签中添加 lang="stylus" rel="stylesheet/stylus"

    image.png

    3.3.2安装mpvue-entry 和 mpvue-router-path

    mpvue-entry文档 : https://www.npmjs.com/package/mpvue-entry?activeTab=readme
    mpvue-rotuer-patch 文档: http://npm.taobao.org/package/mpvue-router-patch

    $ npm install mpvue-entry -D
    $ npm install mpvue-router-patch -D
    

    3.3.2.1: mpvue-entry 相关配置

    (1): 在src 文件夹下面 建一个router 文件夹 , 在新建一个index.js 文件 , 做为路由页面的编写

    image.png
    (2): 在webpack.base.conf.js 中进行相应的配置
    image.png

    注: 在mpvue-loader 1.10 版本后 , 注意 需要 删去plugins中的一段

    /*webpack.base.conf.js 页面*/
    
    const MpvueEntry = require('mpvue-entry')
    ....
    const entry = MpvueEntry.getEntry({
      pages: 'src/router/index.js',
      main: 'src/main.js'
    })
    
    module.exports = {
      entry,
      ...
      plugins: [
        new MpvuePlugin(),
        new MpvueEntry(),
        /*new CopyWebpackPlugin([{  // 这段需要注释掉, 不然会报错
          from: '**!/!*.json',
          to: ''
        }], {
          context: 'src/'
        }),*/
        new CopyWebpackPlugin([
          {
            from: path.resolve(__dirname, '../static'),
            to: path.resolve(__dirname, '../dist/static'),
            ignore: ['.*']
          }
        ])
      ]
    }
    
    /* router/index 页面的配置 */
    // 重新配置一下页面   支持新增页面热更新
    module.exports = [
      {
        path: 'pages/index/index',
        config: {
          navigationBarTitleText: '首页',
        }
      },
      {
        path: 'pages/counter/index',
        config: {
          navigationBarTitleText: 'counter页面',
        }
      }
    ]
    

    3.3.2.2: mpvue-router-patch 相关配置

    // src下面的main.js
    import Vue from 'vue'
    import MpvueRouterPatch from 'mpvue-router-patch'
    
    Vue.use(MpvueRouterPatch)
    

    安装完后检测下是否可以使用 router语法:
    新建一个home页面

    <template>
        <div>
            ....
            <div @click="goHome">点我去home页面</div>
        </div>
    </template>
    <script>
    export default {
        data() {
        },
        methods: {
           goHome() {
               this.$router.push('/pages/home/index')
           } 
        }
    }
    </script>
    
    

    4. mpvue 的一些坑点

    (1) : mpvue项目中所有页面的 created 函数都会在最开始就执行 , 即使这个页面没有运行 解决方法; 使用小程序的 onLoad 函数 或者 onShow函数 代替 (要让tabar页面进入就调用一次接口就用onShow)


    image.png
    image.png

    (2): 本地图片处理方法, 在小程序中要是使用background的话, 必须得是远程图片 , 本地图片也是可以的, 但是得小于8k , 因为 mpvue会把它编译成base64格式的 , 不能被编译成base64的图片一律放在static中 , img需要的 图片要是放在本地的话 , 要放在static中 ,而不要放在相邻的images文件夹中 (最好把图片都放在服务器上面 , 小程序编译大小得小于2m)


    image.png
    image.png

    (3): class 与 style 要是使用computed绑定的话 , 是不能 return 一个 object对象的 (这样的写法在vue中是很常用的, 当时mpvue中不行, 而且不会报错,很坑 , 但是页面上不会有效果)


    image.png
    image.png

    (4): 小程序中不支持dom操作 , 因为小程序没有dom , 因此vue中的 ref 不能用


    image.png

    (5): mpvue中 不能随意的调用method中的方法 , 除了@click, @input 这种 , 其余的情况在template中是不能调用函数方法的 , 这个很坑, 只能调用computed计算属性代替 ,但是computed不能传递参数 , 那些实在需要参 数的可以使用组件来代替

    image.png
    image.png

    (6): 小程序中不能使用过滤器 , 解决方法 ; (1) : 使用computed 代替 , 平时是还可以 , 但是在v-for得传递一个item参数, 就不能使用这个方法了 (2) : 编写一个filter组件 , 使用props 来传递参数

                详情见代码文件
    

    (7): 写在template中的行内样式中的px是不会转化为rpx的 , 因此行内样式直接用rpx 就可以了(也就是style里面的样式) css中的样式都会转化为rpx 格式 (px2rpx-loader插件)

    image.png

    这里的换算关系: rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应 ,在小程序中规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px, iPhone5为320px , iPhone6s: 414px
    设备 rpx换算px (屏幕宽度/750) px换算rpx (750/屏幕宽度)
    iPhone5 1rpx = (320/750) = 0.42px    1px =(750/320) = 2.34px
    iPhone6 1rpx =(375/750) = 0.5px      1px =(750/375) = 2rpx
    iPhone6s 1rpx =(414/750) = 0.552px    1px =(750/414) = 1.81rpx

    image.png
    image.png
    (8): 在mpvue的css中使用*选择所有的元素是不起效果的 (不会报错,但是无效 , 并不会进行变色)
    image.png
    image.png

    (9): 在小程序中使用animate动画, 可以使用微信的animation动画api , 但是微信的animation不提供循环功能 , 可以使用css3的动画 , 注: 使用@keyframes 的时候要加上前缀 , 不然编译的时候stylus会把前缀都写上, 其 中的-moz-, -o- 这两个就会引起报错 , 因此可以直接加上前缀 @ -webkit-keyframes
    直接使用@keyframes报错 具体暂时看代码


    image.png
    image.png

    相关文章

      网友评论

        本文标题:使用mpvue开发小程序

        本文链接:https://www.haomeiwen.com/subject/vftbcqtx.html