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

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

		// 开发环境 .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中配置基础

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中配置基础

"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中配置基础

 compact: false, // 加上此项配置
  env: {
    development: {
      plugins: ['dynamic-import-node']
    }
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944164.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实验五 时序逻辑电路部件实验

一、实验目的 熟悉常用的时序逻辑电路功能部件,掌握计数器、了解寄存器的功能。 二、实验所用器件和仪表 1、双 D触发器 74LS74 2片 2、74LS162 1片 3、74194 1片 4、LH-D4实验仪 1台 1.双…

开源轻量级文件分享服务Go File本地Docker部署与远程访问

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

flask基础

from flask import Flask, requestapp Flask(__name__)# app.route(/) # def hello_world(): # put applications code here # return Hello World!app.route(/) # 路由 当用户访问特定 URL 时,Flask 会调用对应的视图函数来处理请求 def index():return …

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中,右键单击项目名称,选择“管理 NuGet 包”。搜索并安装以下包: OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…

社媒运营专线 - SD-WAN 跨境网络专线 —— 外贸企业社媒平台的专属 “快车道”

在当今全球化的商业浪潮中,社交媒体平台已成为外贸企业拓展国际市场、提升品牌知名度和促进业务增长的关键阵地。然而,网络访问速度慢、IP 不纯净等问题却如影随形,严重制约了企业社媒运营的效率和效果。幸运的是,社媒运营专线 - …

RustDesk内置ID服务器,Key教程

RustDesk内置ID服务器,Key教程 首先需要准备一个域名,并将其指定到你的 rustdesk 服务器 ip 地址上,这里编译采用的是Github Actions ,说白了是就workflows,可以创建一些自动化的工作流程,例如代码的检查&a…

代码随想录算法【Day4】

Day4 1.链表的题目,要在草稿纸上模拟清晰后就简单了 2.双指针更加灵活的应用。 3.环形链表多练习。 24. 两两交换链表中的节点 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* _dummyHead new ListNode(0); //虚拟头结点_dummyHead…

计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

win11中win加方向键失效的原因

1、可能是你把win键锁了: 解决办法:先按Fn键,再按win键 2、可能是可能是 贴靠窗口设置 中将贴靠窗口关闭了,只需要将其打开就好了

Unity自定义Inspector属性名特性以及特性自定义布局问题

前言: 在Unity中编辑属性的适合,一般都是显示属性的英文,如果想要改成中文的话又不能改变属性名,那么自定义特性是很好的选择。 一、自定以特性 这一块没有什么要多说的,就是自定义特性 using UnityEngine; #if UNI…

sentinel集成nacos启动报[check-update] get changed dataId error, code: 403错误排查及解决

整合nacos报403错误 因为平台写的一个限流代码逻辑有问题,所以准备使用sentinel来限流。平台依赖里面已经引入了,之前也测试过,把sentinel关于nacos的配置加上后,启动一直输出403错误 [fixed-10.0.20.188_8848-test] [check-upda…

普通人怎么入门学习并使用AI?

前言 作为普通人看着AI一天一天变革,心急如焚,未来但是就是不知道怎么才算真正进入了AI,使用AI....作为从头至尾追随AI脚步的码农有几点小建议~ 一、💻使用 AI 网站或软件,解决实际问题 不管用哪种AI,先用…

洛谷 P1725:琪露诺 ← 单调队列+DP

【题目来源】https://www.luogu.com.cn/problem/P1725【题目描述】 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精。 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来。但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到…

SDL单设备登录

SDL单设备登录 需求:当账户在其他地方登录时,当前已登录账户会被顶下线 核心思路: 前后端建立WebSocket连接,当客户端登录账户,根据用户id保存Socket连接,如果该用户已有保存的连接,则通知下线…

MySQL数据库函数——日期函数

常用的日期函数 函数功能curdate()返回当前日期curtime()返回当前时间now()返回当前日期和时间year(date)获取指定date的年份month(date)获取指定date的月份day(date)获取指定date的日期date_add(date,interval expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值d…

基于MATLAB的冰箱水果保鲜识别系统

摘要:本作品旨在研究和实现基于MATLAB软件的冰箱水果保鲜识别系统,针对多种常见水果混合的图像进行处理和识别。首先,根据水果与背景的差异选择合适的阈值,对图像进行去噪和对比度增强,然后进行二值化处理。接下来&…

谷歌地球引擎GEE计算NDVI与NDWI的年平均值的方法

本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,基于哨兵2号遥感影像数据,计算某一指定区域NDVI、NDWI等指标的年平均值的方法。 本文是谷歌地球引擎(Google Earth Engine,GEE)…

《机器视觉:开启智能新时代》

《机器视觉:开启智能新时代》 一、机器视觉:工业之眼的崛起二、核心组件:构建精准视觉系统(一)光源:照亮视界的画笔(二)镜头:聚焦精准的慧眼(三)相…

RPA系列-uipath 学习笔记4

使用Uipath 处理hover的问题 备注:使用uipath stversion:2024.10.6,所有学习来源自uipath Academy 首先,打开uipath给我们提供的一个网站 ACME,这个网站呢,需要提前注册一下的哈。 今天呢,就是记录一下,怎…

Excel将混乱的多行做成1列

目标是将数据按从左到右,再从上到下排成一列。 公式法 首先用textjoin函数将文本包起来,做成一个超长文本。 然后用公式 截取文本 Mid(m1,n,3),意思就是对m1单元格,从第n个字符开始,截取3个字符出来。 这个公式如何自…