Vue2 脚手架相关配置

首先安装node,并且安装vue-cli:

npm install -g @vue/cli

创建项目:

vue create myvue

一.配置路由

下载vue-router

npm install vue-router@3 --save-dev

在src下创建router.js,并做以下配置

//router.js
import Vue from "vue"
import VueRouter from "vue-router"
 
Vue.use(VueRouter)
 
const routes = [
    {
        path:"/home",
        name:"home",
        component: ()=>import ("../views/Home/Home.vue")
    },
    {
        path:"/about",
        name:"about",
        component: ()=>import ("../views/About/About.vue")
    }
]
 
const router = new VueRouter({
    routes
})
export default router

配置main.js:

//main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router/router'
Vue.config.productionTip = false
 
new Vue({
  router,
  render: h => h(App),
}).$mount('#app')

配置App.vue

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>
 
<script>
 
export default {
  name: 'App',
  components: {
    
  }
}
</script>
 
<style>
</style>

二.配置vuex

安装vuex,vue对应vux3版本

npm i vuex@3

src下创建并配置store.js

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
 
Vue.use(Vuex)
export default new Vuex.Store({
  state:{
    count:0
  },
 
  getters:{
    getCount(state){
       return state.count
    }
  },
 
  mutations:{
    increment (state, value) {
      state.count = state.count + value
    },
    decrement (state, value) {
      state.count = state.count - value
    }
  },
 
  actions:{ //一般用于异步操作
    async queryData (context, value) {
        // 调用接口获取数据
        const res = await axios.get(...,value)
        //最后还是调用mutations的方法
        context.commit('increment', res.data.count)
    }
  },
 
  modules:{
    user
  }
})
 
 
import Vue from 'vue'
import App from './App.vue'
import router from './router/router'
import store from './store/store'

Vue.config.productionTip = false

new Vue({
  store,
  router,
  render: h => h(App),
}).$mount('#app')

 

user模块配置


export default {
  namespaced: true, //一定要开始命名空间。
  state: { userid: 1234 },
  actions: {
    changeId(context,val){
      context.commit('setUserId',val)
    }  
  },
  mutations: {
    setUserId(state, val) {
      state.userid = val;
    }
  },
  getters: {
    getUserId(state){
      return state.userid
    }
  }
}

三.配置代理 

配置vue.config.js

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: '<url>',//要请求的url
        ws: true,
        changeOrigin: true,
        secure:false,
        pathRewrite: {
              "^/api": "",
        },
      },
    }
  }
}

四.配置axios

src创建api文件夹下并配置http.js文件


import axios from "axios";

if (process.env.NODE_ENV == 'development') {    
    axios.defaults.baseURL = 'https://www.baidu.com';
} else if (process.env.NODE_ENV == 'debug') {    
    axios.defaults.baseURL = 'https://www.ceshi.com';
} else if (process.env.NODE_ENV == 'production') {    
    axios.defaults.baseURL = 'https://www.production.com';
}

axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8';
axios.defaults.headers.get['Content-Type'] = 'application/json;charset=utf-8;';

 
/**
 * http request 拦截器
 */
axios.interceptors.request.use(
    (config) => {
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);
 
/**
 * http response 拦截器
 */
axios.interceptors.response.use(
    (response) => {
        if (response.data.errCode === 2) {
            console.log("过期");
        }
        return response;
    },
    (error) => {
        console.log("请求出错:", error);
    }
);
 
/**
 * 封装get方法
 * @param url  请求url
 * @param params  请求参数
 * @returns {Promise}
 */
export function get(url, params = {}) {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params,
        }).then((response) => {
            resolve(response.data);
        }).catch((error) => {
            reject(error);
        });
    });
}
 
/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */
 
export function post(url, data) {
    return new Promise((resolve, reject) => {
        axios.post(url, data).then(
            (response) => {
                //关闭进度条
                resolve(response.data);
            }).catch((error) => {
                reject(error);
            });
    });
}
 
/**
 * 封装patch请求
 * @param url
 * @param data
 * @returns {Promise}
 */
export function patch(url, data = {}) {
    return new Promise((resolve, reject) => {
        axios.patch(url, data).then(
            (response) => {
                resolve(response.data);
            }).catch((error) => {
                reject(error);
            });;
    });
}
 
/**
 * 封装put请求
 * @param url
 * @param data
 * @returns {Promise}
 */
 
export function put(url, data = {}) {
    return new Promise((resolve, reject) => {
        axios.put(url, data).then(
            (response) => {
                resolve(response.data);
            }).catch((error) => {
                reject(error);
            });
    });
}
 
//统一接口处理,返回数据
export default function (fecth, url, param) {
    return new Promise((resolve, reject) => {
        switch (fecth) {
            case "get":
                console.log("begin a get request,and url:", url);
                get(url, param)
                    .then(function (response) {
                        resolve(response);
                    })
                    .catch(function (error) {
                        console.log("get request GET failed.", error);
                        reject(error);
                    });
                break;
            case "post":
                post(url, param)
                    .then(function (response) {
                        resolve(response);
                    })
                    .catch(function (error) {
                        console.log("get request POST failed.", error);
                        reject(error);
                    });
                break;
            default:
                break;
        }
    });
}

配置api.js文件

import http from './http'


export const test = () => http("get",'接口路径')

五.配置webpack

配置vue.cong.js,打包去除console和debugger的代码,要注意版本,

此模块要求的最小版本为 Node v6.9.0 和 Webpack v4.0.0 版本。

npm install uglifyjs-webpack-plugin --save-dev
configureWebpack: (config) => {
    //  引入uglifyjs-webpack-plugin
    let UglifyPlugin = require('uglifyjs-webpack-plugin');
    if (process.env.NODE_ENV == 'production') {
      // 将每个依赖包打包成单独的js文件
      let optimization = {
        minimizer: [new UglifyPlugin({
            uglifyOptions: {
                warnings: false,
                compress: {
                  drop_console: true, 
                  drop_debugger: false,
                  pure_funcs: ['console.log'] 
                }
            }
         })]
      }
      Object.assign(config, {
        optimization
      })
    } 
  }

六.按需引入Element-UI

下载element-ui

npm install element-ui -s

借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。

npm install babel-plugin-component -D

然后,将 .babelrc 修改为:

{
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
}

在main.js中:

import Vue from 'vue';
import { Button, Select } from 'element-ui';
import App from './App.vue';

Vue.component(Button.name, Button);
Vue.component(Select.name, Select);
/* 或写为
 * Vue.use(Button)
 * Vue.use(Select)
 */

new Vue({
  el: '#app',
  render: h => h(App)
});

组件中引用:

<template>
    <div>
        About
        <el-button>按钮</el-button>
    </div>
</template>

<script>
export default{
    name:"myAbout",
    mounted(){
        console.log(this.$store.state);
    }
}
</script>
<style lang="less" scoped>
    
</style>

基本配置就是这些

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Goat恶霸詹姆斯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值