mpvue 同时开发和打包成H5和微信小程序(简易模板)

开始

这个项目是一个mpvue 的demo, 没有具体的业务实现方法,只有简单的页面切换,还有常用的一些方法封装,总体提供分开打包开发的思路

github源码 => https://github.com/Aimee1608/mpvuedemo

需要看详细版有项目内容的,可以看这篇文章,有详细说明 https://blog.csdn.net/aimee1608/article/details/80757077

目录结构

```

.

├── README.md

├── build                      小程序运行打包配置文件

│  ├── build.js

│  ├── check-versions.js

│  ├── dev-client.js

│  ├── dev-server.js

│  ├── utils.js

│  ├── vue-loader.conf.js

│  ├── webpack.base.conf.js

│  ├── webpack.dev.conf.js

│  └── webpack.prod.conf.js

├── buildH5                    H5运行打包配置文件

│  ├── build.js

│  ├── check-versions.js

│  ├── dev-client.js

│  ├── utils.js

│  ├── vue-loader.conf.js

│  ├── webpack.baseH5.conf.js

│  ├── webpack.devH5.conf.js

│  └── webpack.prodH5.conf.js

├── config                  小程序运行打包配置文件       

│  ├── dev.env.js

│  ├── index.js

│  └── prod.env.js

├── configH5                H5运行打包配置文件

│  ├── dev.env.js

│  ├── index.js

│  └── prod.env.js

├── dist                    小程序打包生成的文件目录

│  ├── app.js

│  ├── app.json

│  ├── app.wxss

│  ├── components

│  │  ├── card$79c1b934.wxml

│  │  ├── counter$6c3d87bf.wxml

│  │  ├── index$622cddd6.wxml

│  │  ├── logs$31942962.wxml

│  │  └── slots.wxml

│  ├── copy-asset

│  │  └── assets

│  │      └── logo.png

│  ├── pages

│  │  ├── counter

│  │  │  ├── main.js

│  │  │  ├── main.wxml

│  │  │  └── main.wxss

│  │  ├── index

│  │  │  ├── main.js

│  │  │  ├── main.wxml

│  │  │  └── main.wxss

│  │  └── logs

│  │      ├── main.js

│  │      ├── main.json

│  │      ├── main.wxml

│  │      └── main.wxss

│  └── static

│      ├── css

│      │  ├── app.wxss

│      │  ├── pages

│      │  │  ├── counter

│      │  │  │  └── main.wxss

│      │  │  ├── index

│      │  │  │  └── main.wxss

│      │  │  └── logs

│      │  │      └── main.wxss

│      │  └── vendor.wxss

│      ├── img

│      │  └── girl.png

│      └── js

│          ├── app.js

│          ├── manifest.js

│          ├── pages

│          │  ├── counter

│          │  │  └── main.js

│          │  ├── index

│          │  │  └── main.js

│          │  └── logs

│          │      └── main.js

│          └── vendor.js

├── distH5                          H5打包生成的文件目录

│  ├── index.html

│  └── static

│      ├── css

│      │  └── app.css

│      ├── img

│      │  ├── girl.png

│      │  └── logo.png

│      └── js

│          ├── app.js

│          ├── manifest.js

│          └── vendor.js

├── index.html                    入口index.html 页面

├── package-lock.json

├── package.json                  安装配置文件

├── project.config.json

├── src                           

│  ├── App.vue                    小程序入口vue

│  ├── AppH5.vue                  H5入口vue

│  ├── api                        小程序和H5分别封装的方法

│  │  ├── httpService.js

│  │  └── wxService.js

│  ├── assets                    静态资源文件

│  │  └── logo.png

│  ├── components                  组件

│  │  └── card.vue

│  ├── main.js                    小程序入口js

│  ├── mainH5.js                  H5入口js

│  ├── pages                      页面内容

│  │  ├── counter

│  │  │  ├── index.vue

│  │  │  └── main.js

│  │  ├── index

│  │  │  ├── index.vue

│  │  │  └── main.js

│  │  └── logs

│  │      ├── index.vue

│  │      └── main.js

│  ├── router                      H5路由

│  │  └── index.js

│  ├── store                      vuex存储

│  │  └── index.js

│  └── utils                      js封装方法

│      └── index.js

└── static                          静态资源文件

    └── img

        └── girl.png

```

简易说明

路由跳转

```

// 组件引用

import card from '@/components/card'

export default {

  data () {

    return {

      motto: 'Hello World'

    }

  },

  components: {

    card

  },

  methods: {

    gotoGame (path) {

        this.reLaunchPageTo(this.router + path)

    }

  }

}

去往Vuex示例页面 去往logs页面 // 组件引用import card from'@/components/card'exportdefault{ data () {return{ motto:'Hello World'} }, components: { card }, methods: { gotoGame (path) {this.reLaunchPageTo(this.router + path) } }}

去往Vuex示例页面 去往logs页面 // 组件引用import card from'@/components/card'exportdefault{ data () {return{ motto:'Hello World'} }, components: { card }, methods: { gotoGame (path) {this.reLaunchPageTo(this.router + path) } }}

```

分别封装方法

H5 mainH5.js方法

```

Vue.mixin({

  data () {

    return {

      service: '', // 服务

      router: '/', // 路由路径

      imgSrc: '' // 图片路径

    }

  },

  methods: {

      newroot () {

          return  this.$route

      },

      navigatePageTo (url) {

          this.$router.push(url)

      },

      reLaunchPageTo (url) {

          this.$router.replace(url)

      },

      setStorageSync (name, data) {

          sessionStorage.setItem(name, JSON.stringify(data))

      },

      getStorageSync (name) {

          return JSON.parse(sessionStorage.getItem(name))

      }

  },

  created () {

      console.log('chrome')

      this.service = httpService

  }

})

```

小程序main.js

```

Vue.mixin({

  data() {

    return {

      service: '',

      router: '/',

      imgSrc: '/'    }

  },

  methods: {

      newroot () {

          return this.$root.$mp      },

      navigatePageTo (url) {

          wx.navigateTo({url: url})

      },

      reLaunchPageTo (url) {

          wx.reLaunch({url: url})

      },

      setStorageSync (name, data) {

          wx.setStorageSync(name, data)

      },

      getStorageSync (name) {

          return wx.getStorageSync(name)

      }

  },

  created() {

      // console.log('wx')      this.service = wxService

  }

})

```

vuex 数据存储

小程序store 直接挂在 Vue原型上

```

Vue.prototype.$store = store

```

H5vue 还是和之前一样

```

new Vue({

  el: '#app',

  router,

  components: { App },

  template: '',

  store

})

```

样式编译

如遇样式错乱,注意.postcssrc.js

```

module.exports = {

  "plugins": {

    // "postcss-mpvue-wxss": {}, // 打包成H5时注释此行

    "postcss-import": {},

    "postcss-url": {},

  // to edit target browsers: use "browserslist" field in package.json

    "autoprefixer": {}

  }

}

```

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

推荐阅读更多精彩内容