vue-cli3.0移动端项目搭建

1.

引入amfe-flexible
安装amfe-flexible:

npm i amfe-flexible --save

在项目的入口main.js文件中引入amfe-flexible:
import 'amfe-flexible'

2.

使用postcss-pxtorem自动将css中的px转换成rem
安装postcss-pxtorem :

npm install postcss-pxtorem --save-dev

3.

新建vue.config.js文件,并添加以下代码
使用 postcss-pxtorem

const autoprefixer = require("autoprefixer");
const pxtorem = require("postcss-pxtorem");
module.exports = {
    publicPath: "./",
    lintOnSave: true,
    css: {
        // modules:false,
        // extract:true,
        sourceMap: false,
        loaderOptions: {
            postcss: {
                plugins: [
                    autoprefixer(),
                    pxtorem({
                        rootValue: 37.5, //vant使用375设计稿,其他使用750设计稿,rootValue:75
                        selectorBlackList: ["weui", "mu"], // 忽略转换正则匹配项
                        propList: ["*"]
                    })
                ]
            }
        }
    },
    configureWebpack: (config) => { //生产环境去掉console.log
        if (process.env.NODE_ENV === 'production') {
            config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
        }
    },
    devServer: {
        // port: 端口号,
        proxy: {
            "/apis": {
                target: url, // target host  目标接口域名
                ws: true, // proxy websockets
                changeOrigin: true, // needed for virtual hosted sites  是否跨域
                pathRewrite: {
                    "^/apis": "" // rewrite path 重写接口
                }
            }
        }
    }
};

如果使用 postcss-px2rem

module.exports = {
    lintOnSave: true,
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require('postcss-px2rem')({remUnit: 30}), // 换算的基数
                ]
            }
        }
    },
}

4.

添加视口内容
在public文件夹下的index.html里修改视口内容

    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">

5.

引入axios

npm i axios -s

main.js里配置axios

import axios from 'axios'
Vue.prototype.$axios = axios;

封装axios
创建utils文件夹,下面新建http.js文件

import axios from "axios";
import QS from "qs";
axios.defaults.timeout = 10000;

//post请求头
axios.defaults.headers.post["Content-Type"] =
    "application/x-www-form-urlencoded;charset=UTF-8";

// 环境的切换,vue-cli3 开发就是dev,打包就是production
// if (process.env.NODE_ENV == "development") {
//     axios.defaults.baseURL = "http://192.168.31.51:3000/api";
// } else if (process.env.NODE_ENV == "production") {
//     axios.defaults.baseURL = "http://127.0.0.1:3000/api";
// }

import store from "../store";
//请求拦截
axios.interceptors.request.use(
    config => {
        console.log("请求拦截");
        // const token = store.getters.getToken;       
        // config.headers.Authorization = "Bearer " + token;
        return config;
    },
    error => {
        return Promise.error(error);
    }
);

// 响应拦截器
axios.interceptors.response.use(
    response => {
        console.log("响应拦截");
        return Promise.resolve(response);
    },
    // 服务器状态码不是200的情况
    error => {
        if (error.response.status) {
            console.log("错误处理");
            //状态码错误处理
            return Promise.reject(error.response);
        }
    }
);

//get请求封装
export function get(url, params) {
    return new Promise((resolve, reject) => {
        axios
            .get(url, {
                params: params
            })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data);
            });
    });
}

//post请求封装,qs库将对象转换为&连接的字符串表单格式
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios
            .post(url, QS.stringify(params))
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data);
            });
    });
}

export function put(url, params) {
    return new Promise((resolve, reject) => {
        axios
            .put(url, QS.stringify(params))
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data);
            });
    });
}

//delete方法的删除参数有点问题{ data: params }
export function deletes(url, params) {
    return new Promise((resolve, reject) => {
        axios
            .delete(url, { data: params })
            .then(res => {
                resolve(res.data);
                console.log("成功删除");
            })
            .catch(err => {
                reject(err.data);
                console.log("删除失败");
            });
    });
}

引入ui框架

vant框架:https://youzan.github.io/vant/#/zh-CN

1.vant安装

npm i vant -S

2.安装插件

npm i babel-plugin-import -D
  1. babel.config.js 中配置vant,最后结果如下
module.exports = {
    presets: [
        '@vue/cli-plugin-babel/preset'
    ],
    plugins: [
        ['import', {
            libraryName: 'vant',
            libraryDirectory: 'es',
            style: true
        }, 'vant']
    ]
}

iview安装: https://www.iviewui.com/docs/introduce

1.iview安装

npm install view-design --save

2.按需引入

npm install babel-plugin-import --save-dev

3.在 babel.config.js 中配置

// .babelrc
{
  "plugins": [["import", {
    "libraryName": "view-design",
    "libraryDirectory": "src/components"
  }]]
}

关注微信公众号,了解更多前端知识。更有小程序和UI设计、后台node等方面的内容哦在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天弈初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值