本文系原创,转载请附带作者信息。项目地址: https://github.com/momozjm/vant-project.git

前言

在项目开发过程中,一个新的项目需要我们从零开始搭建框架,这个时候我们就可以用网上很多的脚手架进行开发,但是我们在业务开发时,还需要对项目的架构进行完善。如果有一个类似于ant design pro这种类型的项目可以拿来即用,不需要过多的配置,就可以进行开发的话,岂不是美滋滋。

所以说为了便于后期的快速开发,我决定利用vue-cli+vant来打造一个移动端开发的模板,后期进行迭代,完善功能。

项目功能模块(不断更新中...)

项目代码

整个项目的脚手架是用vue-cli生成的,具体的生成方式可以自己网上查阅。下面我就简单介绍一下项目中添加了哪些功能模块

一、rem的适配

使用postcss-pxtoremflexable.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搭建一个移动端开发模板的更多相关文章

  1. [转]Vue CLI 3搭建vue+vuex 最全分析

    原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...

  2. Vue CLI 3搭建vue+vuex 最全分析

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  3. 利用vue-cli配合vue-router搭建一个完整的spa流程

    好文章备忘录: 转自:https://segmentfault.com/a/1190000009160934?_ea=1849098 demo源码:https://github.com/1590123 ...

  4. VUE CLI环境搭建文档

    VUE CLI环境搭建文档 1.安装Node.js 下载地址 https://nodejs.org/zh-cn/download/ 2.全局安装VUE CLI win+R键打开运行cmd窗口输入一下代 ...

  5. 利用git+hugo+markdown 搭建一个静态网站

    利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...

  6. 利用Wamp在本地搭建一个wordpress站点

    原文链接:利用Wamp在本地搭建一个wordpress站点 有时候我们会想搭建一个自己的站点,可是由于只是想自己访问,就不是很想为这个站点在买一个服务器和域名,那我们可能首先就想到把自己电脑当做服务器 ...

  7. 使用Vue CLI脚手架搭建vue项目

    本次是使用@vue/cli 3.11.0版本搭建的vue项目 1. 首先确保自己的电脑上的Node.js的版本是8.9版本或者以上 2. 全局安装vue/cli npm install @vue/cl ...

  8. 技术人如何利用 github+Jekyll ,搭建一个独立免费的技术博客

    上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客.原因有很多,有的是懒的写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中 ...

  9. 如何使用Vue.js来搭建一个后台管理系统

    目录 使用的技术 基础但不好版 1.初始化项目 2.实现初始页内容自定义 3.使用路由 原始代码 自建页面 修改路由 4.测试路由跳转 补充 子路由版 嵌套router-view 定义子路由 修改菜单 ...

随机推荐

  1. shell命令-if语句

    判断参数的个数 -ne 不等于 -eq 等于 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于 if [ "$#" -ne 1 ];then echo "n ...

  2. 这届网友实在是太有才了!用python爬取15万条《我是余欢水》弹幕

    年初时我们用数据解读了几部热度高,但评分差强人意的国产剧,而最近正午阳光带着两部新剧来了,<我是余欢水>和<清平乐>,截止到目前为止,这两部剧在豆瓣分别为7.5分和7.9分,算 ...

  3. L8梯度消失、梯度爆炸

    houseprices数据下载: 链接:https://pan.baidu.com/s/1-szkkAALzzJJmCLlJ1aXGQ 提取码:9n9k 梯度消失.梯度爆炸以及Kaggle房价预测 代 ...

  4. 如何在Ubuntu 18.04上安装Nginx

    Nginx功能之强大,想必大家比我更清楚. 百度百科:Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔 ...

  5. 杂记三 &#183; CSP-2019-The first step

    update:我终于懂得衰亡的民族之所以沉默的缘由了. 初赛Day -7 虽然我是第一次参加初赛而且到现在为止我还没见过初赛题但我一点也不慌! 真的!一点!也不慌! 初赛Day 1 早上和可s爱b j ...

  6. MySQL不香吗,为什么还要有noSQL?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是分布式专题的第14篇文章,我们一起来看看NoSQL数据库. 其实我很早就想写写分布式数据库相关的文章,既是我现在正在学习的,也是我很感 ...

  7. 【已解决】error setting certificate verify locations报错

    目录 1.问题描述 2.问题分析 3.解决方法 1.问题描述 在公司的电脑上从Github上clone项目的时候git黑窗口报错"error setting certificate veri ...

  8. python学习笔记(三)---字典

    字典 在Python中,字典 字典 是一系列键 键-值对 值对 .每个键 键 都与一个值相关联,你可以使用键来访问与之相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典.事实上,可将 任何Py ...

  9. [Linux] 检查是否已有进程在运行

    出处:sblim-sfcb-1.4.9 / sfcBroker.c int process_is_running() { #define STRBUF_LEN 512 #define BUF_LEN ...

  10. C51_PID 水温控制系统

    C51_PID 水温控制系统 51CPIDUART水温控制 前言 通过C语言程序写入51单片机实现水的温度的采集,并通过控制器控制加热器给水体加热,对水体的温进行PID控制,保证温度在设定值范围内波动 ...