利用vue-cli + vant搭建一个移动端开发模板
本文系原创,转载请附带作者信息。项目地址: https://github.com/momozjm/vant-project.git
前言
在项目开发过程中,一个新的项目需要我们从零开始搭建框架,这个时候我们就可以用网上很多的脚手架进行开发,但是我们在业务开发时,还需要对项目的架构进行完善。如果有一个类似于ant design pro这种类型的项目可以拿来即用,不需要过多的配置,就可以进行开发的话,岂不是美滋滋。
所以说为了便于后期的快速开发,我决定利用vue-cli+vant来打造一个移动端开发的模板,后期进行迭代,完善功能。
项目功能模块(不断更新中...)
项目代码
整个项目的脚手架是用vue-cli生成的,具体的生成方式可以自己网上查阅。下面我就简单介绍一下项目中添加了哪些功能模块
一、rem的适配
使用postcss-pxtorem与flexable.js结合的形式,适配各类机型。此配置是以2倍屏的基础来配置的,也就是说你的设计图也是以2倍屏设计的,这样设计图上的px值是多少你就可以直接拷过来,省去了px转rem的换算。
1:postcss-pxtorem的配置:在vue.config.js中添加如下代码(需要自己新建vue.config.js文件)
css: {
    loaderOptions: {
      postcss: {
        plugins: [
          require('postcss-pxtorem')({
            rootValue: 37.5, // 换算的基数
            propList: ['*'],
          }),
        ]
      }
    }
  }
2:flexable.js。文件路径src>utils>flexable.js(我一般把项目需要的公共方法或者配置放在utils文件夹下)
!function (n) {
    var e = n.document,
        t = e.documentElement,
        i = 750,
        d = i / 100,
        o = "orientationchange" in n ? "orientationchange" : "resize",
        a = function () {
            var n = t.clientWidth || 320; n > 750 && (n = 750);
            t.style.fontSize = n / d + "px"
        };
    e.addEventListener && (n.addEventListener(o, a, !1), e.addEventListener("DOMContentLoaded", a, !1))
}(window)
3:在main.js中引入flexable.js
import '@/utils/flexable'
二、axios请求封装
1:request.js。文件路径src>utils>request.js
import axios from 'axios'
// 创建 axios 实例
const service = axios.create({
  baseURL: process.env.VUE_APP_API_BASE_URL, // api base_url
  timeout: 6000 // 请求超时时间
})
const err = (error) => {
  if (error.response) {
    if (error.response.status !== 200) {
      console.log(error)
      return
    }
  }
  return Promise.reject(error)
}
// request interceptor
service.interceptors.request.use(config => {
  // const token = 'token'
  // if (token) {
  //   config.headers['Access-Token'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
  // }
  return config
}, err)
// response interceptor
service.interceptors.response.use((response) => {
  return response.data
}, err)
export {
  service as axios
}
三、vuex
在views下新建了一个About.vue。在此组件中走了一遍异步获取数据的流程(接口是乱写的,报404)。大致流程为:页面触发action ---> action中异步回去数据并commit一个mutations ---> mutations中修改state里的值 ---> 视图更新
1:About.vue
<template>
  <div class="about">
    <Button type="primary" @click="getDetail" id="detail">点击调用接口获取详情</Button>
    <router-link to="/">Home</router-link>
    <router-link to="/scroll">Scroll</router-link>
  </div>
</template>
<script>
import { mapState, mapActions } from "vuex";
import { Button } from "vant";
export default {
  computed: {
    ...mapState("about", ["detail"])
  },
  created() {
    // this.getDetail();
  },
  methods: {
    ...mapActions("about", ["getDetail"])
  },
  components: {
    Button
  }
};
</script>
<style lang="less">
.about {
  height: 100vh;
  font-size: 14px;
}
#detail {
  font-size: 14px;
}
</style>
2:index.js。文件文职@>store>index.js
import Vue from 'vue'
import Vuex from 'vuex'
import about from './modules/about'
// import scroll from './modules/scroll'
Vue.use(Vuex)
export default new Vuex.Store({
  modules: {
    about,
    // scroll
  },
})
3:about.js。文件位置@>store>modules>about.js
import { getDetailApi } from '@/api/api'
const state = {
  detail: {}
}
const mutations = {
  setDetail: (state, data) => {
    state = {
      ...state,
      detail: data
    }
  }
}
const actions = {
  getDetail({ commit }) {
    getDetailApi().then(res => {
      commit('setDetail', res)
    })
  },
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
4:api.js。 文件位置@>api>api.js
import { axios } from '@/utils/request'
const api = {
  // 获取详情
  detail: '/detail'
}
export function getDetailApi(parameter) {
  console.log(parameter)
  return axios({
    url: api.detail,
    method: 'get'
  })
}
// export function getDetail() {
//   return axios({
//     url: api.detail,
//     method: 'post',
//     data: {}
//   })
// }
四、Vant
新建一个页面添加了下拉刷新和上拉加载功能。后续会以组件的形式再封装一些常用的功能。
Vant没有在main.js里全局注册,而是使用动态引入的方式。根目录新建.babelrc
{
    "plugins": [
      ["import", {
        "libraryName": "vant",
        "libraryDirectory": "es",
        "style": true
      }]
    ]
  }
五、webpack配置
vue-cli3以后生成的项目,修改webpack都要在项目根目录新建一个vue.config.js来修改你的配置
module.exports = {
  lintOnSave: true,
  // 生产环境打包资源路径
  publicPath: '/',
  outputDir: "dist",
  assetsDir: "static",
  // postcss-pxtorem配置
  css: {
    loaderOptions: {
      postcss: {
        plugins: [
          require('postcss-pxtorem')({
            rootValue: 37.5, // 换算的基数
            propList: ['*'],
          }),
        ]
      }
    }
  },
  // 代理
  devServer: {
    // development server port 8000
    // port: 8000,
    // // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
    // proxy: {
    //   "/api": {
    //     // target: "http://xx.xx.xx.xx:xxxx/",
    //     changeOrigin: true,
    //     pathRewrite: {
    //       '^/api': '/'
    //     }
    //   }
    // }
  },
  // 生产环境去掉sourceMap
  productionSourceMap: false,
}
总结
这个框架只具备开发vue + vant的基本功能,总体上的目标算是达到了,后续也会迭代添加一些组件或者功能。整个过程中算是对自己架构能力进行一些锻炼。
感谢你的阅读,如有修改或者建议的地方,欢迎提出哦。
利用vue-cli + vant搭建一个移动端开发模板的更多相关文章
- [转]Vue CLI 3搭建vue+vuex 最全分析
		
原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...
 - Vue CLI  3搭建vue+vuex 最全分析
		
一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...
 - 利用vue-cli配合vue-router搭建一个完整的spa流程
		
好文章备忘录: 转自:https://segmentfault.com/a/1190000009160934?_ea=1849098 demo源码:https://github.com/1590123 ...
 - VUE CLI环境搭建文档
		
VUE CLI环境搭建文档 1.安装Node.js 下载地址 https://nodejs.org/zh-cn/download/ 2.全局安装VUE CLI win+R键打开运行cmd窗口输入一下代 ...
 - 利用git+hugo+markdown  搭建一个静态网站
		
利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...
 - 利用Wamp在本地搭建一个wordpress站点
		
原文链接:利用Wamp在本地搭建一个wordpress站点 有时候我们会想搭建一个自己的站点,可是由于只是想自己访问,就不是很想为这个站点在买一个服务器和域名,那我们可能首先就想到把自己电脑当做服务器 ...
 - 使用Vue CLI脚手架搭建vue项目
		
本次是使用@vue/cli 3.11.0版本搭建的vue项目 1. 首先确保自己的电脑上的Node.js的版本是8.9版本或者以上 2. 全局安装vue/cli npm install @vue/cl ...
 - 技术人如何利用  github+Jekyll ,搭建一个独立免费的技术博客
		
上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客.原因有很多,有的是懒的写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中 ...
 - 如何使用Vue.js来搭建一个后台管理系统
		
目录 使用的技术 基础但不好版 1.初始化项目 2.实现初始页内容自定义 3.使用路由 原始代码 自建页面 修改路由 4.测试路由跳转 补充 子路由版 嵌套router-view 定义子路由 修改菜单 ...
 
随机推荐
- AJ学IOS(07)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
			
AJ分享,必须精品 先看效果图: 学习代码 // // NYViewController.m // 05-UITextField事件_UIKit复习 // // Created by apple on ...
 - Android调用系统设置
			
最近,弄了一下,调用系统设置的方法,Android4.0的系统,下面的所有设置项,都亲测可以调用.首先调用的方式如下: Intent mintent_setting_time = new Intent ...
 - 【DataBase】 在Windows系统环境 下载和安装 解压版MySQL数据库
			
MySQL官网解压版下载地址:https://dev.mysql.com/downloads/mysql/ 为什么不推荐使用安装版?无脑下一步,很多配置的东西学习不到了 点选第一个就好了,下面的是调试 ...
 - 《带你装B,带你飞》pytest修仙之路5 - yield操作
			
1. 简介 上一篇中,我们刚刚实现了在每个用例之前执行初始化操作,那么用例执行完之后如需要清除数据(或还原)操作,可以使用 yield 来实现.fixture通过scope参数控制setup级别,既然 ...
 - 💕《给产品经理讲JVM》:垃圾收集器
			
前言 在上篇中,我们把 JVM 中的垃圾收集算法有了一个大概的了解,又是一个阴雨连绵的周末,宅在家里的我们又开始了新一轮的学习: 产品大大:上周末我们说了垃圾收集算法,下面是不是要讲一下这些算法的应用 ...
 - R - C Looooops POJ - 2115 (exgcd)
			
题目大意:很好理解,一个for循环语句,从a开始到b结束,步长是c,模数是pow(2,k) 问,最少循环多少次,才能到达b,如果永远都到不了b,输出FOREVER 题解:其实就是求一个线性方程,cx= ...
 - atom跨平台超好用的markdown实时预览
			
https://atom.io/ sublime有预览markdown的插件,但仅限于每次在浏览器中预览,想要找一个能够实时在软件中预览的,终于发现了atom. 很多功能以插件的形式安装,theme也 ...
 - eclipse 集成git工具
			
1.eclipse git插件下载 打开Eclipse,然后点击Help>Install New Software>Add name:git location:http://downloa ...
 - iview使用之怎样通过render函数在table组件表头添加图标及判断多个状态
			
在实际项目开发中,我们经常会用到各种各样的表格,比如在表格中填加下拉菜单,按钮,图标及可以根据状态显示对应文字等等,因为这段时间一直在做后台管理系统,所以表格用的就比较多,当然UI组件库我用的是ivi ...
 - Java中常量的概念
			
常量:在程序执行过程中,其值不发生改变的量.分类:A:字面值常量B:自定义常量字面值常量A:字符串常量(用“”括起来的内容).举例:"hello"B:整数常量 (所有的整数)举例: ...