mpvue踩坑总结编二

2023-11-08

 

这个mpvue大大安装大家肯定都没问题的。

但安装预览的时候,不是用浏览器打开输入:localhost:8080。

而是打开微信开发者工具,把项目根目录导入进去。

坑一:不支持ElmentUI和Vue-router

不支持ElmentUI和诸如类似框架,穷开心的少年们,以为是把之前vue项目直接移入即可,同步生成小程序。

哦买噶,不惜这样啊!

包括Vue-Router我滴个神呀,也是要改为a标签然后写熟悉的微信小程序路径。

不过呢,就是可以写基础的vue和脚本比直接写view要来的爽。

让我先吹吹风外面凉快一会。

坑二:eslint连vue和js后缀文件都有严格校验

二话不说,直接找到
build目录的webpack.base.conf.js把器rule注释掉。

 // {

      //   test: /\.(js|vue)$/,

      //   loader: 'eslint-loader',

      //   enforce: 'pre',

      //   include: [resolve('src'), resolve('test')],

      //   options: {

      //     formatter: require('eslint-friendly-formatter')

      //   }

      // },

注释我吧,否则你没中饭吃

哈哈,坑终归是要填的,谁叫我写vue两三年了呢。
 

因为发ajax请求需要使用微信小程序里的wx.request这种api,不兼容得改一下。

4,css有一些hack报错得改一下。

5,脚手架目录结构不一样,需要手工调整一下。

6,初始化组件的方式不一致,需要简单的修改下,入口必须放到page里,之前我们的入口也是components。

7,最坑的是有这么一个bug,搞了我好久:components引用大小写导致组件失效 · Issue #9 · Meituan-Dianping/mpvue

8,静态资源的限制,属于小程序的,所以这里需要对静态资源,比如图片,font字体做一些特殊的webpack配置,这不属于mpvue的问题,自己配置下解决就好了。

9,项目是ts写的,自己加个loader就好。

其他的不涉及DOM,BOM的,该删的也要删一会,整体转了有3,4个小时吧,以上这些问题。最后效果还是不错的,帮team的趟一下坑。

总结一下,mpvue对组件的转换支持真的很棒,只要注意了文档和我上面说的几点,稍加改造一个vue应用转小程序就实现了。


 

大坑三.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"]
        }
    }
}

大坑四.挂载在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

大坑五.相对路径的图片不显示,比如

<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>

大坑六.子组件数据检测的问题

比如我在某个页面引用了这样的一个组件,绑定数据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的数据检测机制有问题,说得不对的地方希望大佬们斧正.

大坑七.原生组件引入的问题,参考在mpvue 使用 echarts 小程序组件,官方的文档已经很详细了,我这边说几个要点:

  • ready 为异步获取数据。
  • 为 init 添加接收 options 传参
  • page目录下main.js需要添加 usingComponents: {'ec-canvas': '../../../static/ec-canvas/ec-canvas'}
  • 需要放在static目录下

第一条和第二条尤为重要,大家切记

 

常见问题

如果这篇文档没找到您想要的内容,请到 mpvue/issues 进行查找。

vue-router 支持吗?

路由是不能支持的,因为小程序无法动态的插入和控制节点,几乎无法实现。而且小程序对页面的切换性能做了很多优化,页面切换体验也好了很多,所以使用 vue-router 也不那么必要

为什么我新增了页面,没有反应?

因为 webpack 编译的文件使用配置的 entry 决定的,新增的页面并没用添加进 entry,所以需要手动 npm run dev 一下,考虑不是高频操作,所以还可以忍受

能不能引用第三方的 UI 库?

原理上是可以的,但是要去掉 Dom 和 Bom 相关的 API 操作,还要去掉 mpvue 不支持的一些 vue 特性,小程序不支持的 css 选择器等,去掉这些就可以使用了,欢迎大家贡献 mpvue 的 UI 组件库。

能否使用 echarts 等小程序原生组件?

可以,可以看下demo

如何获取小程序在 page onLoad 时候传递的 options

在所有 页面 的组件内可以通过 this.$root.$mp.query 进行获取。

如何获取小程序在 app onLaunch/onShow 时候传递的 options

在所有的组件内可以通过 this.$root.$mp.appOptions 进行获取。

如何捕获 app 的 onError

由于 onError 并不是完整意义的生命周期,所以只提供一个捕获错误的方法,在 app 的根组件上添加名为 onError 的回调函数即可。如下:

export default {
   // 只有 app 才会有 onLaunch 的生命周期
   onLaunch () {
       // ...
   },

   // 捕获 app error
   onError (err) {
       console.log(err)
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mpvue踩坑总结编二 的相关文章

  • 数据分析概述和理论基础

    2018 03 26 Python开发者交流平台 什么是数据分析 数据分析 是指用适当的统计分析方法对收集来的大量数据进行分析 提取有用信息和形成结论 而对数据加以详细研究和概括总结的过程 为什么会有数据分析 随着计算机技术 互联网技术 数

随机推荐

  • Linux---用户的权限

    专栏 Linux 个人主页 HaiFan 本章为大家带来用户的权限的讲解 用户的权限 Linux权限的概念 权限的三类对象 权限的三种类型 权限设置chmod chown chgrp 更改权限chmod chown chgrp umask
  • Atcoder Beginner Contest 164 D

    题意 给定一个只包含数字字符且不包含 0 0 0字符的字符串 S S S 问有子串组成的十位数是 2019 2019
  • QListView的使用

    一 介绍 QListView可以用来以列表的形式展示数据 在Qt中使用model View结构来管理数据与视图的关系 model负责数据的存取 数据的交互则通过delegate来实现 二 model QT提供了一些现成的models用于处理
  • drools规则引擎初探

    1 drools是什么 Drools是为Java量身定制的基于Charles Forgy的RETE算法的规则引擎的实现 具有了OO接口的RETE 使得商业规则有了更自然的表达 Rule是什么呢 一条规则是对商业知识的编码 一条规则有 att
  • Java中Set的使用

    在Java中使用Set 可以方便地将需要的类型以集合类型保存在一个变量中 主要应用在显示列表 Set是一个不包含重复元素的 collection 更确切地讲 set 不包含满足 e1 equals e2 的元素对 e1 和 e2 并且最多包
  • 如何修改桌面的存放路径?(将桌面放到D盘或E盘)

    方法1 使用超级兔子 依次选择 魔法设置 系统 系统文件夹 桌面 就可以自定义桌面项的路径了 方法2 首先要在 开始 运行 内输入 regedit 打开注册表编辑器 然后要在 文件 下拉菜单中 的 导出 功能备份好注册表 以防万一 接着在左
  • 学习笔记——Java入门第二季

    1 1 介绍类与对象 类和对象的关系 时间万物皆对象 对象是具体的事物 是类的具体事例 类是抽象的概念 是对象的模板 new关键字是创建实例对象最重要的标志 Dog duoduo new Dog Dog lucky new Dog 这样就创
  • RabbitMQ--扩展--11--均衡负载

    RabbitMQ 扩展 11 均衡负载 1 场景 面对大量业务访问 高并发请求 可以使用高性能的服务器来提升RabbitMQ服务的负载能力 当单机容量达到极限时 可以采取集群的策略来对负载能力做进一步的提升 但这里还存在一个负载不均衡的问题
  • consul作为配置中心

    Conusl可以作为注册中心 也可以作为配置中心 作为配置中心 使用起来也很方便 大多数都是配置 Consul的安装这里不说了 主要是说明java后端怎么使用 所以本次采用windows版本的consul 引入和配置 2个文件 pom配置
  • ajax error弹框,完美解决:layui弹出层无法关闭/ajax请求成功,但是不进入success,也不进入error...

    我在使用一个叫做H ui admin的后台模板 基于layui 做一套管理系统 业务 点击按钮 出现弹出层 ajax通过接口向后台发送数据 成功后 关闭弹出层 前面都没有什么问题 就是到了关闭弹出层 真的快把我逼疯了 1 首先 我认为是la
  • IFrame和Ajax比较

    说到比较 可能我是需要把这连个东西都给大家介绍一下的 但是介于大家都已经有了很多的理解 我就简单的说了 Ajax 是指一种创建交互式网页应用的网页开发技术 主要是利用XmlHttpRequest对象 该对象在 Internet Explor
  • 网络基础知识

    网络基础概念 网络 两个设备之间 通过介质连接起来就形成网络 上网 就是连接到英特网 要想使pc机之间关联起来 要设置地址 1 IP地址 子网掩码 网关 2 MAC地址 物理地址 window键 R会跳出运行窗口 输入ncpa cpl可以调
  • UGUI ScrollRect使用(实现滑动效果)

    在工作中需要实现滑动效果 网上一番资料查询之后了解到ScrollRect组件 记录一下使用过程中遇到的问题与解决办法 先来看一下ScrollRect的属性 其中Content和Viewport非常重要 能否实现滑动效果取决于这两个属性 至于
  • GCC AVR(Atmel Studio+ AVR Studio)如何在程序存储器(flash)空间存放字符串常量和使用字符串常量

    目录 一 program memory和data memory 二 如何将字符串变量定义到program memory flash 三 如何读取字符串变量 四 PSTR 五 使用strcpy 函数将字符串常量拷贝字符串缓冲区会占用大量的da
  • 报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused

    pyenv install xxx 报错curl 7 Failed to connect to 127 0 0 1 port xxxx Connection refused的解决方法 问题重现截图 在查看下面的原因和使用解决方法之前 确保自
  • .NET EF Core 使用 DBFrist 连接sql server

    目录 1 创建项目并导导入包 2 使用命令行生成实体类和上下行类 3 修改上下文类 从配置文件 appsettings json 读取数据库连接字符串 4 编辑Program cs文件 5 测试连接是否成功 1 创建一个控制器 2 修改控制
  • SpringBoot AOP使用

    AOP即面向切面编程 其存在的目的就是为了解耦 通过AOP的实现 可以让业务逻辑只关心业务本身 而不用在意其他的事情 无需改动原有代码 实现无侵入增加部分能力 在系统日志处理 系统事务处理 系统安全验证 系统数据验证等多个场景中都有可能使用
  • matlab之导入txt文件并取其中一列数据

    1 我想导入下面这个文件的内容 并且获取这个文件中的两列数据 2 首先确保Matlab当前所在文件夹为txt文件所在文件夹 然后命令行执行 X load 2019 03 21 08 59 07 fitness txt 即将txt数据存入一个
  • 浏览器使用postMessage实现零延时定时器

    原文地址 https dbaron org log 20100309 faster timeouts 作者 David Baron 浏览器零延时定时器 function var timeouts var messageName zero t
  • mpvue踩坑总结编二

    这个mpvue大大安装大家肯定都没问题的 但安装预览的时候 不是用浏览器打开输入 localhost 8080 而是打开微信开发者工具 把项目根目录导入进去 坑一 不支持ElmentUI和Vue router 不支持ElmentUI和诸如类