vue搭建项目和相关配置

本文详细介绍了在Vue.js项目中如何配置webpack、环境变量,以及如何封装和使用Axios进行接口请求。通过创建.vue.config.js文件设置打包配置,使用.env.development和.env.production文件区分开发和生产环境的API地址。同时,文章还展示了如何封装 Axios 实例,统一接口管理,并在实际项目中使用这些配置和封装。

一、创建项目
在这里插入图片描述
二、配置webpack和环境
1.在项目跟路径下,新建 vue.config.js 文件

module.exports = {
    publicPath: './',      // 打包后的基本路径
    lintOnSave: false,    // 保存时 不使用 EsLint 检查
    outputDir: process.env.outputDir,
    devServer: {
        port: 8090,         // 端口号
        proxy: {
            '/api': {
                target: "http://192.168.2.49:8090",     // 本地调试接口, 本机localhost:xxx
                changeOrigin: true,
                pathRewrite: {
                    "^/api": "/"
                }
            }
        }
    }
}
  1. 在根目录下新建 .env.development 文件(该文件没有注释功能,一定要删掉。本处只是方便阅读)
NODE_ENV = 'development'	// 模式-开发环境(该文件是没有注释的,真正用到时需去掉,下同)
VUE_APP_MODE = 'development'	//通过"VUE_APP_MODE"变量来区分环境
VUE_APP_API_URL = 'http://192.168.2.49:10920/bcz/api/'	// 本地调试的api地址
  1. 在根目录下新建 .env.production 文件
NODE_ENV = 'production' // 模式-生产环境
VUE_APP_MODE = 'production'
VUE_APP_API_URL = 'https://bc.yncgj.cn:10009/bcz/api/'	// 线上服务器的api地址

三、封装配置Axios
1. 安装 axios, npm install axios 。 如果报错,可以npm install core-js --save以下。或者删掉node_modules,重新 npm install
2.在src文件下新建api文件夹(也可以utils,自行),在该文件夹下新建 request.js 文件

import axios from 'axios';
import qs from 'qs';

console.log(process.env.VUE_APP_API_URL);
if(process.env.VUE_APP_MODE === 'development'){
    //开发环境下的执行操作
    console.log('development环境');
}else{
    //生产环境下的执行操作
    console.log('production环境');
}

class XHR {
    constructor(config) {
      this.config = {
        // baseURL: 'https://www.fastmock.site/mock/.../traffic', // mock接口
        // baseURL: 'http://192.168.2.49:10920/bcz/api/',
        baseURL: process.env.VUE_APP_API_URL,
        headers: {},
        crossDomain: true
      }
      // 初始化 请求实例
      this.config = Object.assign(this.config, config)
      this.$request = axios.create(this.config);
      //请求拦截器 - 添加请求头会用到
    // this.$request.interceptors.request.use(
    //   config => {
    //     config.withCredentials = false;
    //     // console.log(sessionStorage.getItem('toKen'));
    //     if (sessionStorage.getItem('toKen')) {
    //       config.headers.Authorization = sessionStorage.getItem('toKen') + '';
    //     }
    //     return config;
    //   },
    //   error => {
    //     return Promise.reject(error);
    //   });
    }
  
    get(url, data) {
      return this.request(url, data, 'GET')
    }
  
    post(url, data, config = {}) {
      return this.request(url, data, 'POST', config)
    }
  
    request(url, data, method = 'GET', option) {
      // debugger
      // 格式化参数
      if (typeof data === 'string') {
        method = data
        data = {}
      }
      const config = {
        url,
        method
      }
      // 区分 post get
      if (method === 'GET') {
        config.params = data
        config.data = qs.stringify(data)
      } else {
        config.data = data
      }
  
      // 发起请求
      return this.$request(config).then(({
        data
      }) => {
        const result = {
          code: parseInt(data.code || 0),
          count: parseInt(data.count || 0),
          data: data.data,
          msg: data.message,
        }
        return result
      }).catch((error) => {
        error = error && error.toString()
        console.error('接口调用异常: error', error)
        if (error && (error.includes('Error:') || error.includes('<html'))) {
          error = '接口异常,请联系管理员!'
        }
        return Promise.reject(error)
      })
    }
  }
  
  export default XHR
  1. 统一接口管理,在api文件夹下新建 interface.js 文件
import XHR from "./request";
const request = new XHR();

export default {
    /**
     * 获取设施
     */
    equipment: params => request.get(`/facilityType/queryFacilityTypeParentList`, params),
    /**
     * 根据参数获取详情
     */
    queryDetail: params => request.get(`/facility/queryDetail?${params}`),
    /**
      * 提交表单
      */
    submitForm: params => request.post(`/facility/save`, params),
}
  1. 使用,可以自行在需要的页面中引入,也可以封装全局引用。全局使用示例:
import allRequest from './api/interface'
Vue.prototype.$http = allRequest;

Vue.use(allRequest);  // 本行代码只是测试配置是否ok

四、 测试和使用
1. 在 request.js 或 interface.js 中,使用以下语句,可以看到控制台输出什么环境,和以上配置有效

console.log(process.env.VUE_APP_API_URL);
if(process.env.VUE_APP_MODE === 'development'){
    //开发环境下的执行操作
    console.log('development环境');
}else{
    //生产环境下的执行操作
    console.log('production环境');
}
  1. 在需要的页面中使用
methods: {
  async getInfo() {
	try {
		const { data } = await this.$http.equipment();
		console.log(data);
	} catch (error) {}
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值