美文网首页
二次封装简化版

二次封装简化版

作者: 好多柱 | 来源:发表于2022-02-27 09:18 被阅读0次
    module.exports = {
      lintOnSave:false,
      devServer: {
        open:true, //启动项目时自动打开浏览器
        host: 'localhost',
        port: '8082',
        proxy: {   //解决跨域问题
          '/api': {
            target: ' http://',
            changeOrigin: true,
          //   pathRewrite:{
          //     '^/api':''
          //  }
          }
        }
      },
      // 全局的SASS引入
    需要引入依赖 node - sass 、 sass - loader 
    这里安装 一定要指定版本,^4.14.1表示大于当前版本,默认 sass 的版本太高,webpack 编译时出现了错误,这时需要换成低版本 npm i node-sass@4.14.1 --save-dev
    //版本过高的解决办法; https://blog.csdn.net/qq_38157825/article/details/114318772
      css: {
        loaderOptions: {
          sass: {
            prependData :`@import "./src/common/css/global.scss";`
          }
        }
      }
    }
    
    

    gloabal.scss

    $colorRed : red;
    

    在页面中可以直接使用

    .guess{
      color:$colorRed;
    }
    

    axios二次封装:
    service.js

    import axios from 'axios'
    import vue from '../main'
    const service = axios.create({
      baseURL: '/api',
      timeout:5000
    })
    //获取token
    function getTokenBylocal() {
      let token = sessionStorage.getItem('token')
      return token
    }
    // 请求拦截
    service.interceptors.request.use(
      config => {
        if (getTokenBylocal()) {
          config.headers['X-Auth-Token'] = getTokenBylocal()
        } else {
          vue.$router.push('/login')
         }
        return config
      },
      error => {
        return Promise.reject(error)
      }
    )
    // 响应拦截
    service.interceptors.response.use(
      response => {
        let res = response.data
        if (response.status == '400') {
          vue.$router.push('/login')
        }
        return Promise.resolve(res)
      },
      error => {
        return Promise.reject(error)
      }
    )
    export default service
    

    common.js

    import service from './service'
    export function requestOfPost(url, data) {
      return service.post(url,data)
    }
    export function requestOfGet(url, data) {
      return service.get(url,data)
    }
    

    api.js

    import { requestOfGet } from './common'
    export function getRequest(url, data) {
     return new Promise((resolve, reject) => {
       requestOfGet(url, data).then(res => {
         resolve(res)
         }
       ).catch(error => {
           reject(error)
           }
          )
     })
    }
    

    url.js

    //统一管理所有URL
    const url = {
     login:'/v1/regions'
    }
    export default url
    

    login.vue

    <template>
     <div>
       Login...
       <button @click="getData">登录</button>
     </div>
    </template>
    <script>
    import url from '../../request/url.js'
    import {getRequest} from '../../request/api.js'
    export default {
     methods: {
        async getData() {
         try {
           getRequest(url.login).then(()=>{
             console.log('接口请求成功...')
             sessionStorage.setItem('token','4366d5b51c36471688b54d3cb831f591')
             this.$router.push('/')
             })
         } catch (error) {
           console.log('error',error);
         }
       }
     },
    }
    </script>
    

    一个打包优化
    //vue.config.js

    const uglifyJsPlugin=require('uglifyjs-webpack-plugin);
    let isProduction = process.env.NODE_ENV;
    
    // 打包优化
     configureWebpack : config => {
     // 生产环境相关配置
     if ( isProduction == "production"){
     // 代码压缩
     config.plugins.push (
     new UglifyPsPlugin ({
     uglifyOptions :{
     //生产环境自动剧除 console
     warnings : false ,
     compress :{
    //warnings : false ,//若打包错误,则注释这行
     drop _ debugger : true ,
     drop _ console : true ,
     pure _ funcS :[ console.log]
    }
    }
    })
    }
    }
    

    相关文章

      网友评论

          本文标题:二次封装简化版

          本文链接:https://www.haomeiwen.com/subject/pcfhrrtx.html