vite共享配置之---define

ops/2025/2/14 8:02:11/

define

定义全局常量替换方式。其中每项在开发环境下会被定义在全局,而在构建时被静态替换。

一、基本功能

define选项主要用于在开发期间和构建期间全局替换特定的字符串。这些替换在源码级别进行,意味着在代码运行之前,指定的变量或表达式就已经被替换成了相应的值。

二、配置方式

vite.config.jsvite.config.ts文件中,可以通过define选项来配置全局替换规则。例如:

// vite.config.js
export default defineConfig({define: {'__APP_VERSION__': JSON.stringify('v1.0.0'),'__API_URL__': '"https://api.example.com"'}
});

在这个例子中,__APP_VERSION____API_URL__这两个变量在构建期间会被替换成相应的值。注意,对于非字符串值,Vite会自动使用JSON.stringify将其转换为字符串。

三、使用环境变量

define选项还可以用来定义环境变量,这些变量可以在项目的任何地方使用。例如,可以通过defineprocess.env中的变量暴露给代码:

// vite.config.js
export default defineConfig({define: {'process.env.MY_ENV': JSON.stringify('this is my env')}
});

然后,在项目的代码中就可以通过process.env.MY_ENV来访问这个环境变量了。

四、注意事项

  1. 类型声明:对于使用TypeScript的开发者来说,为了确保类型检查和代码提示的正确性,需要在env.d.tsvite-env.d.ts文件中添加相应的类型声明。
  2. 构建时替换:需要注意的是,define中的替换是在构建时进行的,而不是在运行时。这意味着在开发模式下和构建后的代码中,这些变量的值是不同的。
  3. 表达式限制:由于Vite使用esbuild进行替换,因此值的表达式必须是一个包含JSON可序列化值(null、boolean、number、string、array或object)或单一标识符的字符串。复杂的表达式或函数调用可能不会被正确替换。
  4. 避免污染全局作用域:过度使用define可能会导致全局作用域被污染,从而影响代码的可读性和可维护性。因此,建议谨慎使用并合理组织全局常量

五、类型声明

如果是在vite.config.ts文件中定义了变量,需要新建一个vite-env.d.ts文件对变量进行声明,如下所示:

// vite-env.d.ts
/// <reference types="vite/client" />declare const __APP_VERSION__: string;
declare const __ENVIRONMENT__: string;


http://www.ppmy.cn/ops/157036.html

相关文章

Redis --- 秒杀优化方案(阻塞队列+基于Stream流的消息队列)

下面是我们的秒杀流程&#xff1a; 对于正常的秒杀处理&#xff0c;我们需要多次查询数据库&#xff0c;会给数据库造成相当大的压力&#xff0c;这个时候我们需要加入缓存&#xff0c;进而缓解数据库压力。 在上面的图示中&#xff0c;我们可以将一条流水线的任务拆成两条流水…

学前端框架之前,你需要先理解 MVC

MVC 软件架构设计模式鼎鼎大名&#xff0c;相信你已经听说过了&#xff0c;但你确定自己已经完全理解到 MVC 的精髓了吗&#xff1f; 如果你是新同学&#xff0c;没听过 MVC&#xff0c;那可以到网上搜一些文章来看看&#xff0c;不过你要有心理准备&#xff0c;那些文章大多都…

vivado 7 系列器件时钟

7 系列器件时钟 注释&#xff1a; 本章节以 Virtex -7 时钟源为例。 Virtex-6 的时钟资源与此类似。如果使用不同的架构&#xff0c;请参阅有关器件的 《时 钟资源指南》 [ 参照 40] 。 Virtex-6 和 Virtex-7 器件内含 32 个称为 BUFG 的全局时钟缓存。 BUFG 可满…

【DeepSeek】DeepSeek概述 | 本地部署deepseek

目录 1 -> 概述 1.1 -> 技术特点 1.2 -> 模型发布 1.3 -> 应用领域 1.4 -> 优势与影响 2 -> 本地部署 2.1 -> 安装ollama 2.2 -> 部署deepseek-r1模型 1 -> 概述 DeepSeek是由中国的深度求索公司开发的一系列人工智能模型&#xff0c;以其…

C++Primer学习(2.1)

前言&#xff1a;与大多数编程语言一样&#xff0c;C的对象类型决定了能对该对象进行的操作&#xff0c;一条表达式是否合法依赖于其中参与运算的对象的类型。一些语言&#xff0c;如Smalltalk和Python 等&#xff0c;在程序运行时检查数据类型;与之相反&#xff0c;C是一种静态…

Termux安装ssh实现电脑ssh

Termux下载 点击下载 在 Termux 中安装并使用 SSH&#xff0c;按照以下步骤操作&#xff1a; 1. 更新软件包列表 pkg update && pkg upgrade2. 安装 OpenSSH pkg install openssh3. 设置 SSH 密码&#xff08;必须&#xff0c;否则无法使用 SSH 服务器&#xff09…

背包问题常见bug

关于背包问题的常见问题的讨论 不同背包问题的遍历顺序问题 01背包问题和完全背包问题的遍历顺序相反&#xff0c;主要是因为它们在状态转移过程中对物品的使用方式不同。以下是详细的分析&#xff1a; 1. 01背包问题 问题描述&#xff1a;每个物品最多只能使用一次。 状态…

日志统计(acWing,蓝桥杯)

题目&#xff1a; 1238. 日志统计 题目 提交记录 讨论 题解 视频讲解 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志&#xff0c;日志共有 NN 行。 其中每一行的格式是&#xff1a; ts id 表示在 tsts 时刻编号 idid 的帖子收到一个”赞”。 现在小明想…