vue3配置测试环境、开发环境、生产环境

第一步:在src同级新建 .env.production 、.env.test 、.env.development文件
第二步:在文件中配置开发环境、生产环境、测试环境

typescript 复制代码
		// 开发环境 .env.development
		NODE_ENV = 'development'
		VUE_APP_MODE = 'development' 
		outputDir = dist_dev // 打出包的名称
		VUE_APP_BASE_URL = http://xxxxxxxxx:xxxx/

		// 生产环境 .env.production
		NODE_ENV = 'production'
		VUE_APP_MODE = 'production'
		outputDir = dist_pro
		VUE_APP_BASE_URL = http://xxxxxxxxx:xxxx/

		// 测试环境 .env.test
		NODE_ENV = 'alpha' // 此处不能为test,否则会报错
		VUE_APP_MODE = 'alpha'// 此处不能为test,否则会报错
		outputDir = dist_test
		VUE_APP_BASE_URL = http://xxxxxxxxxxxx:xxxx/

第三步:在axios.js中配置基础

typescript 复制代码
import axios from "axios";
import { ElMessage, ElMessageBox } from 'element-plus'
import router from '../router/index';
//axios请求配置
const config = {
    // 访问后端
    baseURL: process.env.VUE_APP_BASE_URL,
    //超时时间
    timeout: 1000000
}
//class:定义一个类
class Server {
    //构造函数里面初始化
    constructor(config) {
        this.instance = axios.create(config)
        //定义拦截器:请求发送之前和请求返回之后处理
        this.interceptors()
    }
    //拦截器
    interceptors() {
        //axios发送请求之前的处理
        this.instance.interceptors.request.use((config) => {
            //token携带
            let token = localStorage.getItem('token');
            if (token != null) {
                config.headers.token = token
            }
            let tokenUser = localStorage.getItem('tokenUser');
            if (tokenUser != null) {
                config.headers.tokenUser = tokenUser
            }
            return config;
        }, (error) => {
            error.data = {}
            error.data.msg = '服务器异常,请联系管理员!'
            return error;
        })
        //axios请求返回之后的处理
        //请求返回之后的处理
        this.instance.interceptors.response.use((res) => {
            if (res.data.code == 0 && res.data.msg?.includes('请先注册')) {
                return res.data;
            }
            if (res.data.code == 0) {
                if (res.data.msg != 'wxnull') {
                    ElMessage({ type: 'error', message: res.data.msg })
                }
                return res.data
            } else {
                return res.data
            }
        }, (error) => {
            error.data = {};
            if (error && error.response) {
                switch (error.response.status) {

                    case 400:
                        error.data.msg = '错误请求';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 401:
                        error.data.msg = '未授权,请重新登录';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 403:
                        error.data.msg = '拒绝访问';
                        return ElMessageBox.confirm('很抱歉,登录已过期,请重新登录', '登录已过期', {
                            confirmButtonText: '重新登录',
                            type: 'error',
                            showCancelButton: false
                        }).then(() => {
                            router.push('/login');
                            localStorage.removeItem('token');
                        })
                    case 404:
                        error.data.msg = '请求错误,未找到该资源';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 405:
                        error.data.msg = '请求方法未允许';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 408:
                        error.data.msg = '请求超时';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 500:
                        error.data.msg = '服务器端出错';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 501:
                        error.data.msg = '网络未实现';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 502:
                        error.data.msg = '网络错误';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 503:
                        error.data.msg = '服务不可用';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 504:
                        error.data.msg = '网络超时';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    case 505:
                        error.data.msg = 'http版本不支持该请求';
                        return ElMessage({ type: 'error', message: error.data.msg })
                    default:
                        error.data.msg = `连接错误${error.response.status}`;
                        return ElMessage({ type: 'error', message: error.data.msg })
                }
            } else {
                error.data.msg = "连接到服务器失败";
                // router.push('/login');
                return ElMessage({ type: 'error', message: error.data.msg })
            }
            return Promise.reject(error)
        })
    }

    /* GET 方法 */
    get(url, params) {
        return this.instance.get(url, { params })
    }
    /* POST 方法 */
    post(url, data) {
        return this.instance.post(url, data)
    }
    /* PUT 方法 */
    put(url, data) {
        return this.instance.put(url, data)
    }
    /* DELETE 方法 */
    delete(url) {
        return this.instance.delete(url)
    }

    //图片上传
    upload(url, params) {
        return this.instance.post(url, params, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        })
    }
    upimg(url, params) {
        return this.instance.get(url, params, {
            headers: {
                'Content-Type': 'application/octet-stream'
            }
        })
    }
}
export default new Server(config)

第四步:在package.json中配置基础

typescript 复制代码
"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "serve:development": "vue-cli-service serve --mode development",
    "build:development": "vue-cli-service build --mode development",
    "serve:production": "vue-cli-service serve --mode production",
    "build:production": "vue-cli-service build --mode production"
  }
// 使用yarn/npm run serve:development/production 运行
// 使用yarn/npm run build:development/production 打包

第五步:在babel.config.js中配置基础

typescript 复制代码
 compact: false, // 加上此项配置
  env: {
    development: {
      plugins: ['dynamic-import-node']
    }
  }
相关推荐
福兮说1 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理2 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6662 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)3 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan3 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_4 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒4 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技4 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu5 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙6 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript