博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue分环境打包配置方法一
阅读量:4506 次
发布时间:2019-06-08

本文共 6217 字,大约阅读时间需要 20 分钟。

直接上代码配置:

首先是config下面的文件修改 dev.env.js 

'use strict'const merge = require('webpack-merge')const prodEnv = require('./prod.env')module.exports = merge(prodEnv, {  NODE_ENV: '"development"',  target: '"dev"'//新增配置})

其次是config下面的文件修改 prod.env.js

'use strict'let target = process.argv.splice(2)[0] || 'dev';//新增配置(关键配置 如不知 自行百度资料)console.log('端口环境host', process.argv, process.argv.splice(2), target);//打印module.exports = {  NODE_ENV: '"production"',  target: '"' + target + '"'//新增配置}

其次是config下面的文件不变 test.env.js

'use strict'const merge = require('webpack-merge')const devEnv = require('./dev.env')module.exports = merge(devEnv, {  NODE_ENV: '"testing"'})

配置config下面 的index.js跨域代理设置:

proxyTable: {      '/api': {        target: 'http://xxxxx', //要访问的后端接口        changeOrigin: true,        pathRewrite: {          '^/api': 'http://xxxxx'        }      },    },

新建api.js

import Vue from 'vue'import axios from 'axios'import QS from 'qs' //视情况用于不用;import { Loading, Message } from 'element-ui';import store from '../store/index'let loading //定义loading变量function startLoading() { //使用Element loading-start 方法  loading = Loading.service({    lock: true,    text: '努力加载中……',    background: 'rgba(0, 0, 0, 0.5)'  })}function endLoading() { //使用Element loading-close 方法  loading.close()}//那么 showFullScreenLoading() tryHideFullScreenLoading() 要干的事儿就是将同一时刻的请求合并。//声明一个变量 needLoadingRequestCount,每次调用showFullScreenLoading方法 needLoadingRequestCount + 1。//调用tryHideFullScreenLoading()方法,needLoadingRequestCount - 1。needLoadingRequestCount为 0 时,结束 loading。let needLoadingRequestCount = 0export function showFullScreenLoading() {  if (needLoadingRequestCount === 0) {    startLoading()  }  needLoadingRequestCount++}export function tryHideFullScreenLoading() {  if (needLoadingRequestCount <= 0) return  needLoadingRequestCount--  if (needLoadingRequestCount === 0) {    endLoading()  }}// npm run build -- dev  对应后台 xxxxx  开发// npm run build -- pre  对应后台 xxxxx  测试// npm run build -- pro  对应后台 xxxxx  生产let baseWebURL = '';// 环境的切换if (process.env.NODE_ENV == 'development') { //开发环境     baseWebURL = '/api' + '/api';  //对应config下面的index 跨域设置 后面api后台统一拦截处理自己项目按需求配置} else if (process.env.target == 'pre') { //测试环境  baseWebURL = 'https://www.test.com';} else if (process.env.target == 'pro') { //生产环境  baseWebURL = 'http://www.production.com';}//生成一个axios实例var instance = axios.create({  baseURL: baseWebURL,});console.log(instance, 'instance')//1.请求超时时间instance.defaults.timeout = 10000;//2.post请求头 instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';//3.公共部分(请求带token设置)//instance.defaults.headers.common['Authorization'] = store.state.token;//4.返回数据类型的定义//instance.defaults.responseType = 'json';//5.带cookie请求instance.defaults.withCredentials = true// 请求拦截器instance.interceptors.request.use(  config => {    console.log(config, 'config请求拦截器')    //1.全局loadin配置    /*2.token校验:一般是在登录完成之后,将用户的token通过localStorage或者cookie存在本地;    然后用户每次在进入页面的时候(即在main.js中),会首先从本地存储中读取token;    如果token存在说明用户已经登陆过则更新vuex中的token状态;    然后,在每次请求接口的时候,都会在请求的header中携带token;    后台人员就可以根据你携带的token来判断你的登录是否过期,如果没有携带,则说明没有登录过。    v1.每次发送请求之前判断vuex中是否存在token            v2.如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况    v3.即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断*/    const token = store.state.token;    alert(token,'token')            token && (config.headers.Authorization = token);    if (config.method == 'post') {      console.log('post请求统一需要做什么判断')    }    //config.headers.Accept = 'application/json'; //规定接受形式json格式    showFullScreenLoading() //开启loading    return config;  }, error => {    return Promise.reject(error);  });// 响应拦截器instance.interceptors.response.use(  response => {    console.log(response, 'response响应拦截器')    // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据         //否则的话抛出错误    if (response.status === 200) {      tryHideFullScreenLoading() //关闭loading      Message({        showClose: true,        message: '响应成功',        type: 'success'      })      return Promise.resolve(response);    } else {      return Promise.reject(response);    }  }, error => {    console.log(error, 'error')    if (error.response.data.status) {      console.log('后台错误码统一处理')      switch (error.response.data.status) {        // 401:未登录;未登录则跳转登录页面,并携带当前页面的路径;在登录成功后返回当前页面,这一步需要在登录页操作。                        case 401:          router.replace({            path: '/login',            query: {              redirect: router.currentRoute.fullPath            }          });          break;        // 403:token过期;登录过期对用户进行提示;清除本地token和清空vuex中token对象;跳转登录页面                        case 403:          Message({            showClose: true,            message: '登录过期,请重新登录',            duration: 1000,            type: 'warning'          })          //清除token          localStorage.removeItem('userToken');          store.commit('LOGIN_OUT', null);          //跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面           setTimeout(() => {            router.replace({              path: '/login',              query: {                redirect: router.currentRoute.fullPath              }            });          }, 1000);          break;        //404请求不存在        case 404:          Message({            showClose: true,            message: '网络请求不存在',            duration: 1000,            type: 'error'          })          break;        //其他错误,直接抛出错误提示        default:          Message({            showClose: true,            message: error.response.data.message,            duration: 1000,            type: 'error'          })      }    }    return Promise.reject(error);  });// 封装axios的get请求export function getData(url, params) {  return new Promise((resolve, reject) => {    instance.get(url, params).then(response => {        resolve(response.data);      })      .catch(error => {        reject(error);      });  });}// 封装axios的post请求export function postData(url, params) {  return new Promise((resolve, reject) => {    instance.post(url, QS.stringify(params)).then(response => {        resolve(response.data);      })      .catch(error => {        reject(error);      });  });}

直接执行命令即可打对应包 

// npm run build -- dev  开发// npm run build -- pre  测试// npm run build -- pro  生产

转载于:https://www.cnblogs.com/lhl66/p/10218949.html

你可能感兴趣的文章
360浏览器文档模式升级
查看>>
MongoDB学习笔记(四)
查看>>
bzoj2301 [HAOI2011]Problem b(莫比乌斯反演)
查看>>
C#文件操作-File类
查看>>
winform中Dock的布局规则
查看>>
Java实现主线程等待子线程
查看>>
命令模式(Command)
查看>>
CozyRSS开发记录9-快速实现一个RSS解析器
查看>>
后端程序员之路 21、一个cgi的c++封装
查看>>
ha_innobase::open
查看>>
IIS6架构
查看>>
ELKStack-生产案例项目实战(十一)
查看>>
PHP图形处理函数试题
查看>>
幸运数
查看>>
Golang脱坑指南: goroutine(不断更新)
查看>>
nginx 3.nginx+fastcgi
查看>>
悲观与乐观
查看>>
[转载]:Invoke and BeginInvoke
查看>>
CodeForces Round 196
查看>>
Best Practices: Common Coding Issues When Using the SharePoint Object Model
查看>>