当前位置: 首页 > news >正文

Vite多环境配置与打包:

环境变量必须以VITE开头

1.VITE_BASE_API:

  • 在开发环境中设置为 /dev-api,这是一个本地 mock 地址,通常用于模拟后端接口。

2.VITE_ENABLE_ERUDA:

  • 设置为 "true",表示启用调试工具,通常是为了方便开发和调试。

3.VITE_PUBLIC_PATH:

  • 在开发环境中设置的打包路径为 http://192.168.10.7:8001,这可能是一个本地开发服务器的地址。

开发环境:

# baseUrl 
# /dev-api 为本地 mock 地址,不使用 mock 的话此处换为你的开发环境接口地址,例如 http://192.168.233.233
VITE_BASE_API = '/dev-api'# 开发环境启用 cdn eruda 调试工具。若不启用,将 true 修改为 false 或其他任意值即可
VITE_ENABLE_ERUDA = "true"# 线上环境平台打包路径
VITE_PUBLIC_PATH = http://192.168.10.1

线上生产环境:

线上生产环境的链接和打包路径通常是不同的。

  • VITE_BASE_API:这是指向后端 API 的基础 URL,通常用于应用程序与后端服务器通信。在你的例子中,它指向 http://192.168.10.7:8881/,这通常是一个内部或开发环境的地址。
  • VITE_PUBLIC_PATH:这是静态资源的公共路径,用于线上环境中访问静态文件。在你的例子中,它指向 http://8.154.36.180:8903,可能是一个用于托管静态资源的 CDN 或服务器。

Vite多环境配置与打包:

1. 安装依赖

npm install --save-dev cross-env

npm install --save-dev cross-env 命令用于安装 cross-env 这个工具,并将其作为开发依赖添加到你的项目中。下面是更详细的说明:

cross-env 的用途

  • 跨平台环境变量设置:

cross-env 允许你在不同操作系统(如 Windows 和 Unix/Linux)上统一设置环境变量。因为在 Windows 和 Unix 系统中设置环境变量的方式不同,使用 

cross-env 可以避免这些差异。

  • 常用场景:通常在 package.json 的 scripts 部分使用,用于设置环境变量后执行特定的命令。

示例:

在 package.json 中的 scripts 部分,你可能会看到类似的命令:

"scripts": {"start": "cross-env NODE_ENV=development node server.js","build": "cross-env NODE_ENV=production webpack"
}

这意味着无论在 Windows 还是 Unix 系统上,你都可以使用 npm run start 或 npm run build 来启动开发或生产环境,而不必担心操作系统的差异。

如何检查项目中是否配置了 cross-env(忽略):

1.查看 package.json:

  • 打开项目根目录下的 package.json 文件,检查 devDependencies 是否包含 cross-env:

2..使用命令行:

  • 运行以下命令查看所有安装的包,包括开发依赖:
npm ls --dev
  • 在输出中查找 cross-env,如果找到了,说明项目已经配置了这个工具。

2. 配置环境变量

在项目根目录下创建 .env 文件,分别为不同环境创建不同的环境变量配置。例如:

  • .env.development:开发环境
  • .env.production:生产环境

在这些文件中,你可以设置不同的环境变量,例如 API 端点或其他服务的配置。

# .env
VITE_API_URL=https://api.example.com# .env.development
VITE_API_URL=http://localhost:3000# .env.production
VITE_API_URL=https://api.prod.example.com

3. 应用环境变量

在项目中,你可以通过 import.meta.env 访问这些环境变量。

在login登录页的时候,启动的时候可以打印到控制台查看运行的环境

// 在 Vue 组件或任何 JS 文件中console.log(import.meta.env.MODE);

这个文件是自动生成的,后面会详细解释

4. 运行和构建项目

使用不同的环境变量运行和构建项目。在命令行中,你可以通过 --mode 选项指定环境。

# 开发环境
vite --mode development# 生产环境
vite build --mode production

或者,你可以在 package.json 的脚本中定义不同的命令,以便更方便地运行和构建。

// package.json
{"scripts": {"dev": "vite --mode development","build:dev": "vite build --mode development","build:prod": "vite build --mode production"}
}

然后,你可以使用 npm 或 yarn 运行这些脚本(后续给老师,老师来对命令进行区分):

npm run dev
npm run build:dev
npm run build:prod

在 vite.config.ts中

使用了defineConfig 函数来定义构建选项。

export default defineConfig(({ mode }) => ({build: {rollupOptions: {output: {chunkFileNames: "static/js/[name]-[hash].js",entryFileNames: "static/js/[name]-[hash].js",assetFileNames: "static/[ext]/[name]-[hash].[ext]"}}}
}));
  • 默认环境:如果你没有在命令行中通过 --mode 参数显式指定模式,当你运行 vite build 时,默认情况下,Vite 将会使用 production(生产) 模式。
  • 在 production 模式下,Vite 会进行优化,以确保生成的构建文件适合生产环境。

可以通过在命令行中指定 --mode 参数来切换到其他环境,例如开发环境。


文件名:

ImportMetaEnv 和 ImportMeta 这些接口通常是在使用 Vite 和 TypeScript 时自动生成的。它们是 Vite 提供的类型定义,旨在帮助开发者在项目中更好地使用环境变量和模块功能。

具体情况:

  1. 自动生成:当你创建 Vite 项目时,Vite 会自动生成相关的类型定义文件,以便 TypeScript 能够正确识别 import.meta 对象的属性。
  2. 类型安全:这些接口提供了类型安全的方式来访问环境变量和其他模块元数据,减少了运行时错误的可能性。
  3. 更新:如果你更改了 Vite 配置中的环境变量,重新启动开发服务器后,这些类型定义会自动更新,以反映最新的配置。

接口详解:

1.ImportMetaEnv:

  • 描述了环境变量的类型。它可以包含任意数量的键值对,但至少有以下几个属性:
    • SSR: 布尔值,指示是否启用服务端渲染。
    • PROD: 布尔值,指示是否在生产模式。
    • DEV: 布尔值,指示是否在开发模式。
    • MODE: 当前运行模式(如 development 或 production)。
    • BASE_URL: 应用的基础 URL。

2.ImportMeta:

  • 描述了模块的元数据,包括:
    • glob: 动态导入多个模块的函数。
    • env: 当前环境变量的信息,类型为 ImportMetaEnv。
    • hot: 可选属性,用于热模块替换(HMR)。
    • url: 当前模块的完整路径。

模版:

interface ImportMetaEnv {[key: string]: anyBASE_URL: stringMODE: stringDEV: booleanPROD: booleanSSR: boolean
}interface ImportMeta {// 当前模块的 URL,指向模块文件的完整路径url: string;// 可选属性,用于支持热模块替换 (HMR)// 如果启用 HMR,该属性提供一个上下文对象readonly hot?: import('./hot').ViteHotContext;// 当前环境变量的信息// 包含构建时或运行时的环境配置,如 API URL、版本号等readonly env: ImportMetaEnv;// 动态导入多个模块的函数// 与 glob 模式结合使用,允许批量加载模块glob: import('./importGlob').ImportGlobFunction;
}

使用示例

在 Vite 项目中,可以直接使用这些接口来访问环境变量和模块信息。

// 假设在你的 TypeScript 文件中// 访问环境变量const apiUrl = import.meta.env.VITE_BASE_API; // 访问基础 API URLconst isDev = import.meta.env.DEV; // 判断是否在开发模式// 打印环境信息console.log(`API URL: ${apiUrl}`);console.log(`Is Development: ${isDev}`);// 使用 HMR(如果启用)if (import.meta.hot) {import.meta.hot.accept((newModule) => {// 处理热更新console.log('Module updated:', newModule);});
}// 使用动态导入const loadComponent = async () => {const module = await import.meta.glob('./components/*.vue'); // 动态加载所有 Vue 组件console.log(module);
};
loadComponent();

前面提到,默认是生产环境指的是打包的默认模式:

默认模式说明

1.开发模式:

  • 当你运行 vite 命令或 npm run dev 时,Vite 默认使用开发模式。这是因为开发命令通常用于启动开发服务器,帮助开发者实时预览和调试应用。

2.生产模式:

  • 当你运行 vite build 时,Vite 默认会使用生产模式来构建应用。这里的 "默认" 指的是在没有显式指定 --mode 参数的情况下,Vite 会将 NODE_ENV 设置为 production。
总结
  • 开发命令(如 npm run dev)默认使用开发模式。
  • 构建命令(如 vite build)默认使用生产模式。

这两者并不冲突。在开发过程中,你通常使用开发模式,而在构建生产版本时,Vite 则使用生产模式。

所运行的时候默认是开发环境

如果你的 Vite 项目默认使用开发环境,通常是因为以下几个原因:

1.未指定环境模式
  • 默认情况下,当你运行 vite 或 vite build 命令时,如果没有显式指定 --mode 参数,Vite 会将 NODE_ENV 设置为 development。
  • 例如,运行以下命令时:
npm run dev

这将启动开发服务器,默认使用开发模式。

package.json 脚本配置

  • 在 package.json 中,可能会有类似以下的脚本:
"scripts": {"dev": "vite",  // 启动开发服务器"build": "vite build"  // 构建生产版本
}
  • 运行 npm run dev 会启动开发服务器,并使用开发环境。
2.vite.config.js 配置
  • 如果在 vite.config.js 中没有特别配置以指定环境,Vite 将默认为开发模式。
  • 你可以查看 vite.config.js,确认是否有设置 mode 的代码。
3.环境变量文件
  • Vite 支持使用环境变量文件(如 .env, .env.development, .env.production)来设置不同的环境变量。
  • 如果没有 .env.production 文件,或者在构建时没有指定 --mode production,则默认使用开发环境的配置。
4.命令行参数
  • 如果你希望在构建时使用生产环境,可以使用:
npm run build -- --mode production
总结

你的项目默认是开发环境,通常是因为没有显式指定其他环境模式。你可以通过查看 package.json、vite.config.js 和环境变量文件来确认和修改环境配置。

相关文章:

Vite多环境配置与打包:

环境变量必须以VITE开头 1.VITE_BASE_API: 在开发环境中设置为 /dev-api,这是一个本地 mock 地址,通常用于模拟后端接口。 2.VITE_ENABLE_ERUDA: 设置为 "true",表示启用调试工具,通常是为了…...

git维护【.gitignore文件】

在工程下添加 .gitignore 文件【git忽略文件】 *.class .idea *.iml *.jar /*/target/...

【Canvas与色彩】十六等分多彩隔断圆环

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>隔断圆环Draft5十六等分多彩</title><style type"text…...

什么是pip? -- Python 包管理工具

前言 不同的编程语言通常都有自己的包管理工具&#xff0c;这些工具旨在简化项目的依赖管理、构建过程和开发效率&#xff0c;同时促进代码的复用和共享。每个包管理工具都有其独特的特点和优势&#xff0c;开发者可以根据自己的编程语言和项目需求选择合适的包管理工具。 pip是…...

FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解

一、FastAPI框架使用枚举来型来限定参数 FastAPI框架验证时&#xff0c;有时需要通过枚举的方式来限定参数只能为某几个值中的一个&#xff0c;这时就可以使用FastAPI框架的枚举类型Enum了。publish:December 23, 2020 -Wednesday 代码如下&#xff1a; #引入Enum模块 from fa…...

OceanBase—02(入门篇——对于单副本单节点,由1个observer扩容为3个observer集群)——之前的记录,当初有的问题未解决,目前新版未尝试

OceanBase—02&#xff08;入门篇——对于单副本单节点&#xff0c;由1个observer扩容为3个observer集群&#xff09;——之前的记录&#xff0c;有的问题未解决&#xff0c;新版未尝试 1、前言—安装单副本单节点集群1.1 docker安装OB 2、查看现有集群情况2.1 进入容器&#x…...

前沿论文创新点集合

系列文章目录 文章目录 系列文章目录一、《LAMM: Label Alignment for Multi-Modal Prompt Learning》二、《MaPLe: Multi-modal Prompt Learning》三、《Learning to Prompt for Vision-Language Models》CoOp四、《MobileCLIP: Fast Image-Text Models through Multi-Modal R…...

刷题记录(好题)

Problem - D - Codeforces 思路&#xff1a; 滑动窗口思想&#xff0c;一个数组记录起始点&#xff08;记录出现过的次数&#xff09;&#xff0c;另一个数组记录截至点&#xff08;记录出现过的次数&#xff09;&#xff0c;从0开始遍历&#xff0c;设定一个长度为d的滑动窗口…...

【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}

1. 函数简介&#xff1a; Hive会将常用的逻辑封装成函数给用户进行使用&#xff0c;类似于Java中的函数。 好处&#xff1a;避免用户反复写逻辑&#xff0c;可以直接拿来使用。 重点&#xff1a;用户需要知道函数叫什么&#xff0c;能做什么。 Hive提供了大量的内置函数&am…...

python sqlite3 工具函数

起因&#xff0c; 目的: sqlite3 最常用的函数。 比如&#xff0c;某人给了一个 database.db 文件。 但是你登录的时候&#xff0c;不知道账号密码。 此文件就是&#xff0c;查看这个数据库的详细内容。 有哪些表某个表的全部内容。添加数据 代码&#xff0c; 见注释 impor…...

顺丰Android面试题集锦及参考答案

TCP 三次握手和四次挥手是什么,挥手过程中主动方的状态是什么? TCP 三次握手是建立连接的过程: 第一次握手:客户端向服务器发送一个 SYN 报文,该报文包含客户端的初始序列号(seq=x)。此时客户端进入 SYN_SENT 状态。第二次握手:服务器收到客户端的 SYN 报文后,向客户端…...

uniapp中检测应用更新的两种方式-升级中心之uni-upgrade-center-app

uniapp一个很是用的功能&#xff0c;就是在我们发布新版本的app后&#xff0c;需要提示用户进行app更新&#xff0c;并告知用户我们新版的app更新信息&#xff0c;以使得用户能及时使用上我们新开发的功能&#xff0c;提升用户的实用度和粘性。注意:这个功能只能在app端使用 效…...

Python爬虫通过 Cookie 和会话管理来维持其在网站上的会话状态

Python 爬虫虽然是一个热门且非常实用的技术领域&#xff0c;但在实际开发中&#xff0c;确实存在一些困难的地方。以下是 Python 爬虫开发中常见的难点和挑战&#xff1a; 1. 处理反爬虫机制 许多网站为防止爬虫的恶意访问&#xff0c;采取了各种反爬虫措施。常见的反爬虫技…...

使用STM32单片机实现无人机控制系统

无人机控制系统是无人机的大脑&#xff0c;负责处理无人机的姿态控制、导航和通信等功能。本文将详细介绍如何使用STM32单片机实现无人机控制系统&#xff0c;包括硬件设计、软件设计、系统调试与测试等内容。 一、系统概述 无人机控制系统通常包括飞行控制器、传感器、执行器…...

【包教包会】2D图片实现3D透视效果(支持3.x、支持原生、可合批)

将去年写的SpriteFlipper从2.x升级到3.x。 如果需要2.x版本或需要了解算法思路&#xff0c;请移步&#xff1a;https://blog.csdn.net/weixin_42714632/article/details/136745051 优化功能&#xff1a;可同时绕X轴和Y轴旋转&#xff0c;两者效果会叠加。 完美适配Web、原生…...

解决nginx+tomcat宕机完美解决方案

问题描述&#xff1a;公司项目太老了&#xff0c;还是tomcat项目&#xff0c;部署两台tomcat,做了nginx负载。最近发现每到上午10&#xff0c;下午3点&#xff0c;tomcat就宕机了&#xff0c;死活找不到原因&#xff0c;客户影响超期差&#xff0c;实在让人头疼。 解决思路&am…...

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式&#xff08;主流&#xff09;‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 5.1. 互斥锁实现 5.1.1…...

一款完全开源并免费的监测与分析系统,支持监测,预警,分析,报告,支持本地化部署(附源码)

前言 在当今这个信息爆炸的时代&#xff0c;企业和个人都需要时刻了解网络上的动态&#xff0c;以便及时了解自身品牌形象和社会舆论的变化。然而&#xff0c;现有的舆情监测工具往往价格昂贵&#xff0c;且cao作复杂&#xff0c;难以满足普通用户的需求。 在这种背景下&…...

python中时间函数及其应用

近段时间&#xff0c;因在改写以前写的学校自动铃声控制系统&#xff0c;又学到了一些新的知识&#xff0c;特记录如下&#xff1a; 一、时间函数基础 1、time模块中的函数及其用法 time.time(): 返回当前时间的时间戳&#xff0c;即自1970年1月1日以来的秒数。 time.localt…...

MoveIt2-humble】入门教程----第一个 C++ MoveIt 程序

四节教程会手把手带你写一个完整的 Moveit 控制程序&#xff0c;包括轨迹规划、RViz可视化、添加碰撞物体、抓取和放置。 1 创建依赖包 进入到教程所在工作空间下的src目录&#xff0c;创建一个新的依赖包。 ros2 pkg create \--build-type ament_cmake \--dependencies mov…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析

LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...