vue3+vite配置环境变量实现开发、测试、生产的区分

news2024/9/20 14:29:02

文章目录

    • 一、为什么需要区分 (dev)、测试 (test) 和生产 (prod) 环境
    • 二、vue3的项目如何通过配置方式区分不同的环境
      • 1、创建不同环境的.env文件
      • 2、在不同的.env文件中配置相应的环境变量
        • 1).env.develoment
        • 2).env.test
        • 3).env.production
      • 3、在项目中使用环境变量
      • 4、在package.json中定义运行项目的脚本命令
    • 三、运行效果

在vue的实际项目中都要经过开发、测试、然后上生产的阶段,在开发、测试的过程中往往会要频繁的切换开发、测试、生产等不同的环境。每个环境的配置有可能不一样,本文介绍如何通过vue3+vite配置环境变量实现开发、测试、生产灵活便捷的切换。

一、为什么需要区分 (dev)、测试 (test) 和生产 (prod) 环境

做过大型项目开发的都知道,每个项目都会要经历开发、测试、再到生产上线,一般在开发时候最常用到(development)开发环境、(production)生产环境、(test)测试环境。每个环境的配置可能都不太一样。

  • 开发环境:为开发人员提供一个安全的地方来进行编码和调试,不会影响到其他环境,一般来说开发人员在本地机器上运行和测试应用程序。
  • 测试环境:用于测试,模拟生产环境,确保新功能在部署前能够正常工作,并且不会影响现有功能。
  • 生产环境:是面向用户的最终环境,任何更改都必须经过严格的测试才能部署到这里,通常具有优化和最少的日志记录。

区分开发 (dev)、测试 (test) 和生产 (prod) 环境是软件开发中的一个最佳实践。不同的环境通常有不同的资源配置。典型的如vue所调用的后台接口数据,在开发平台可能是本地服务提供的接口、用于自动化测试可能是mock提供的数据、生产应该是正式环境提供的真实接口。

二、vue3的项目如何通过配置方式区分不同的环境

vue3的项目可以通过vite的环境变量配置来进行不同环境的配置,可以参考vite的官方文档《环境变量和模式》
接下来,我们以一个实例来介绍在vue3的项目如何通过vite配置方式区分不同的环境。

1、创建不同环境的.env文件

在vue3根目录下创建三个文件分别为.env.develoment.env.test.env.production
创建的文件需要.env开头

env文件

2、在不同的.env文件中配置相应的环境变量

1).env.develoment
NODE_ENV='development'
# API URL
VITE_APP_API_URL='http://localhost:8000'
2).env.test
NODE_ENV='test'
# API URL
VITE_APP_API_URL=''
3).env.production
NODE_ENV='production'
# API URL
VITE_APP_API_URL='http://iblog.ishareread.com'

这里我们主要通过VITE_APP_API_URL变量来区分不同的环境调用不同的接口,在开发环境调用本地接口http://localhost:8000,在测试环境用mock接口,在生产环境调用真实接口。

3、在项目中使用环境变量

使用import.meta.env.VITE_APP_API_URL在axios请求中使用环境变量的配置来调用不同的接口。

import axios from 'axios'
const api_rul = import.meta.env.VITE_APP_API_URL
// create an axios instance
const service = axios.create({
    baseURL: api_rul,
    timeout: 5000 // request timeout
})
export default service

查看调用的哪些环境变量,可以在在main.js打印console.log('环境变量:', import.meta.env);看一下
main.js

import './assets/main.css'
import { createApp } from 'vue'
import App from './App.vue'

console.log('环境变量:', import.meta.env);

createApp(App).mount('#app')

4、在package.json中定义运行项目的脚本命令

{
  "name": "mocktest",
  "version": "0.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "vite",
    "test": "vite --mode test",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "axios": "^1.7.5",
    "vue": "^3.4.29"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.0.5",
    "mockjs": "^1.1.0",
    "vite": "^5.3.1",
    "vite-plugin-mock": "^3.0.2"
  }
}

package.json

三、运行效果

开发环境运行npm run dev
npm run dev

测试环境运行npm run test
npm run dev
可以看出通过运行不同的命令通过环境变量区分了不同的运行环境,避免了不同环境去改代码去适配不同的环境。


博客地址:http://xiejava.ishareread.com/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查找2

树表的查找 1)二叉排序树 I)二叉排序树的插入 II)二叉排序树的生成 III)二叉排序树的删除 2)平衡二叉树 I)平衡二叉树调整 、

MMOE+ESSM

MMOE 动机 多个任务之间的相关性并不是很强,这个时候如果再用过去那种共享底座embedding的结构,往往会导致『跷跷板』现象。 当前学术界已经有很多工作意识到1中描述的问题并且尝试去解决,但大多数工作的套路都是『大力出奇迹』的路子&…

zigbee笔记、十五、组播通信原理

一、zigbee四种通讯 1、单播(略) 2、广播(略) 3、组播:在zigbee网络中,模块可以用分组来标记,发送的模块如果发送的组号和网络里面标记接收模块的组号相对应,那么这些模块就可以拿到…

深度剖析渗透测试:流程、规范与实战全指南

一、引言 在当今数字化时代,网络安全问题日益凸显。渗透测试作为一种主动的安全评估方法,能够帮助企业和组织发现潜在的安全漏洞,提高系统的安全性。本文将详细介绍渗透测试的实施流程、规范、不同类型的测试方法以及相关的 checklist 和报告…

Matlab处理H5文件

1.读取h5文件 filenamexxx.h5; h5disp(filename) 2.h5文件保存为mat文件 读取 HDF5 文件中的数据 % 指定 HDF5 文件的路径 filename xxx.h5;% 读取 HDF5 文件中的各个数据集 A241_P h5read(filename, /A241_P); A241_W h5read(filename, /A241_W); A242_P h5read(filen…

ensp 中 wlan 的配置过程和示例

一、拓朴: 要求:vlan20 用于笔记本上网,使用Huawei信号,vlan30 用于手机上网,使用 Huawei-5G 信号 二、配置过程: 1、SW1 基本配置: 起 vlan batch 10 20 30,10 为管理 vlan&#…

Acrobat Pro DC 2024 for mac/Win:跨平台PDF编辑与管理的巅峰之作

Adobe Acrobat Pro DC 2024是一款专为Mac和Windows用户设计的全面PDF解决方案软件,它集成了创建、编辑、转换、共享和签署PDF文件的强大功能,为用户带来前所未有的高效与便捷体验。 强大的PDF编辑功能 Acrobat Pro DC 2024在PDF编辑方面表现出色。用户…

JavaScript初级——DOM增删改

1、 document.createElement() —— 可以用于创建一个元素节点对象,他需要一个标签名作为参数,将会根据该标签名创建元素节点对象,并将创建好的对象作为返回值返回。 2、 document.createTextNode(&#…

职场达人必备!MyComputerManager助你轻松管理快捷方式

前言 你是否还在为硬盘管理界面上那一堆乱糟糟的快捷方式头疼不已?是不是每次打开‘此电脑’都像是在玩寻宝游戏,寻找那个被深埋的文件夹?想象一下,如果能在此电脑页面一键启动程序,是不是觉得整个人都轻松了许多&…

使用Tabs组件提升页面内容的聚焦与分类效率

当页面信息量较大时,为了提高用户的浏览效率,我们需要对页面内容进行有效的分类和展示。HarmonyOS提供的Tabs组件是一个理想的解决方案,可以在一个页面内快速切换视图内容,提升用户查找信息的效率,同时减少用户在单次操…

CSS定位与布局

一、display属性(元素如何显示) 网页上的每个元素都是一个​盒模型​。​display​属性决定了盒模型的​行为方式​,设置元素如何被显示。 display常用的属性共有​4个​值: ​display: none;​ -- 让标签消失(隐藏元素并脱离文档…

Mac M1Pro 安装Java性能监控工具VisualVM 2.1.9

本地已经安装了java8,在终端输入jvisualvm提示没有安装 zhiniansara ~ % jvisualvm The operation couldn’t be completed. Unable to locate a Java Runtime that supports jvisualvm. Please visit http://www.java.com for information on installing Java.官网…

Kafka事件(消息、数据)的存储

1、查看有关kafka日志配置文件的信息 2、查看kafka全部主题的日志文件 3、查看每个主题的日志文件 4、__consumer_offsets-xx文件夹的作用 package com.power;public class Test {public static void main(String[] args) {int partition Math.abs("myTopic".hashCo…

企业微信API对接文档【可向微信用户发消息】

目录 企业微信API对接文档 1.背景 2.获取微信第三方token 3.安装docker环境 4.打包与启动 4.1打包镜像 4.2启动容器(启动应用) 5.企业微信二维码验证 5.1 获取初始二维码 5.2 第1次二维码验证 5.3 第2次二维码验证 6. 企业微信三…

上博士为了毕业写学术论文头都大了,但更难受的是英语不咋地,投稿后经常会因为语言问题而惨遭拒稿,每每想起就令人心情郁郁,天台可期。

上博士为了毕业写学术论文头都大了,但更难受的是英语不咋地,投稿后经常会因为语言问题而惨遭拒稿,每每想起就令人心情郁郁,天台可期。有些审稿人也会直接告知需要专业的修改,那咋整呢,让润色呗,…

虚拟机virtualbox linux ubuntu使用usb串口

1.卸载brltty sudo apt remove brltty brltty是一个没啥用但是会抢占ch431的软件,所以卸载它 2.连接上串口,点击连接对应的usb串口 3.查看是否连接上 sudo dmesg -T | grep tty 查看tty组的最近日志,如果连接成功会显示连接的时间和串口…

基于数据挖掘的心力衰竭疾病风险评估系统

B站视频及代码下载:基于数据挖掘的心力衰竭疾病风险评估系统_哔哩哔哩_bilibili 1. 项目简介 心力衰竭是一种常见的心脏疾病,它严重影响患者的生活质量和预期寿命。早期识别和干预对于改善患者的预后至关重要。近年来,随着大数据技术和机器学…

eleme

设置主从从mysql57服务器 --配置主数据库 # systemctl stop firewalld # setenforce 0 # systemctl disable firewalld # ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz # cp -r mysql-5.7.44-linux-…

【题解】【循环】——[NOIP2010 普及组] 数字统计

【题解】【循环】——[NOIP2010 普及组] 数字统计 [NOIP2010 普及组] 数字统计题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2 提示 1.题意解析2.AC代码 [NOIP2010 普及组] 数字统计 戳我查看题目(洛谷) 题目描述 请统计某个给定…

Spring cloud 网关信息

网关简绍 就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 引入网关依赖 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependenc…