【vite】define 全局常量定义

🧭 define 说明

  • 类型: Record<string, any>

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

Vite 使用 esbuild define 来进行替换,因此值的表达式必须是一个包含 JSON 可序列化值(null、boolean、number、string、array 或 object)或单一标识符的字符串。对于非字符串值,Vite 将自动使用 JSON.stringify 将其转换为字符串。

示例

export default defineConfig({define: {__APP_VERSION__: JSON.stringify('v1.0.0'),__API_URL__: 'window.__backend_api_url',},
})

NOTE
对于使用 TypeScript 的开发者来说,请确保在 env.d.tsvite-env.d.ts 文件中添加类型声明,以获得类型检查以及代码提示。

示例:

// vite-env.d.ts
declare const __APP_VERSION__: string

🧭 场景一

定义了全局常量,控制台输出正常,但是受ts语法提示错误的警告。

🙋‍♂️ 问题说明

全局定义一个窗口的内部宽度:MY_GLOBAL_WIN

# vite.config.ts
import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig(({ command, mode }) => {const env = loadEnv(mode, process.cwd(), '')return {define: {__MY_GLOBAL_WIN__: 'window.innerWidth'},plugins: [vue()],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}}
})

在App.vue中使用

<script setup lang="ts">
console.log(__MY_GLOBAL_WIN__)
</script>

直接爆红
在这里插入图片描述

输出没问题
在这里插入图片描述

ts语言检测提示:

找不到名称“MY_GLOBAL_WIN”。ts(2304)

🚀 解决方式

env.d.tsvite-env.d.ts 文件中添加类型声明。

# vite-env.d.ts
declare const __MY_GLOBAL_WIN__: string
  1. 如果还是爆红可以重启编辑器。(Ctrl + shift + P 输入 reload)
  2. 如果还是爆红请添加文件解析。
# tsconfig.app.json
{"include": ["vite-env.d.ts"],
}

🧭 场景二

如果全局常量定义的较多,这会污染 vite.config.ts 代码阅读,可以使用文件导入。

🙋‍♂️ 问题说明

全局常量过多,导致vite.config文件代码冗余

import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig(({ command, mode }) => {const env = loadEnv(mode, process.cwd(), '')return {define: {__APP_VERSION__: JSON.stringify('v1.0.0'),// 定义一个全局配置__MY_GLOBAL_CONFIG__: {key: 'value',nested: {foo: 'bar'}},__MY_GLOBAL_WIN__: 'window.innerWidth'},plugins: [vue()],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}}
})

🚀 解决方式

改进后的代码

import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import globalConfig from './globalConfig'
export default defineConfig(({ command, mode }) => {const env = loadEnv(mode, process.cwd(), '')return {define: globalConfig,plugins: [vue()],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}}
})
# globalConfig.ts
export default {__APP_VERSION__: JSON.stringify('v1.0.0'),// 定义一个全局配置__MY_GLOBAL_CONFIG__: {key: 'value',nested: {foo: 'bar'}},__MY_GLOBAL_WIN__: 'window.innerWidth'
}

按照以上方式你可能会遇到这种现象:
在这里插入图片描述

错误信息提示:

文件 “globalConfig.ts” 不在项目 “tsconfig.node.json” 的文件列表中。项目必须列出所有文件,或使用 “include” 模式。ts(6307)

按照错误提示,完成文件解析操作:

# tsconfig.node.json
{"include": ["globalConfig.*",],
}

这样就不会爆红了
在这里插入图片描述

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

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

相关文章

【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用

【面试干货】Java中的四种引用类型&#xff1a;强引用、软引用、弱引用和虚引用 1、强引用&#xff08;Strong Reference&#xff09;2、软引用&#xff08;Soft Reference&#xff09;3、弱引用&#xff08;Weak Reference&#xff09;4、虚引用&#xff08;Phantom Reference…

外部网络如何访问内网?

在现代信息化时代&#xff0c;随着企业规模的扩大和业务范围的扩展&#xff0c;越来越多的企业需要实现外部网络访问内网的需求。外部网络访问内网指的是在外部网络环境下&#xff0c;通过互联网等公共网络途径&#xff0c;实现对企业内部网络的访问和操作。这种需求的出现&…

【LinuxC语言】深入理解IP地址与端口号

文章目录 前言端口号IP地址IP地址的分类主机地址与网络地址多播是什么子网掩码特殊的地址与私有的地址总结前言 在计算机网络中,IP 地址和端口号是两个非常重要的概念。IP 地址用于标识网络上的设备,而端口号则用于在同一设备上区分不同的服务或应用。在 Linux C 语言编程中…

obsidian中用check list 打造待办清单

背景 在快节奏的现代生活中&#xff0c;有效管理个人时间和任务成为提升生活与工作效率的关键。 Obsidian&#xff0c;作为一款强大的知识管理和笔记应用&#xff0c;通过其丰富的插件生态&#xff0c;为我们提供了高度自定义的任务管理解决方案。本文旨在详细介绍如何在Obsid…

基于C# .NET 的数字图像处理系统开发

嗨&#xff0c;我是射手座的程序媛&#xff0c;期待和大家更多的交流与学习&#xff0c;欢迎添加3512724768。 《面向对象程序设计》-基于C# .NET 的数字图像处理系统开发 &#xff08;一&#xff09;实习的目的 根据《面向对象程序设计》理论课授课内容&#xff0c;是使学生…

Java项目:基于SSM框架实现的助学贷款管理系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的助学贷款管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

python学习笔记-09

面向对象编程-中 面向对象三大特征&#xff1a;封装、继承、多态。 封装&#xff1a;把内容封装起来便于后面的使用。对于封装来讲&#xff0c;就是使用__init__方法将内容封装道对象中&#xff0c;然后通过对象直接或者self获取被封装的内容。 继承&#xff1a;子继承父的属…

Uniapp在屏幕尺寸低于960出现样式错乱(开箱即用)

我司项目突然要做平板兼容,我在调试的时候发现当屏幕尺寸低于960px发现样式但凡是以rpx单位的全部失效&#xff0c;如果是以px为单位那么影响就比较小&#xff0c;当时解决方案是写了不少媒体查询和把单位rpx改成px&#xff0c;后面查阅文档发现大错特错宽屏适配只需一行代码即…

04--MySQL8.0_JDBC

第一章 JDBC概述 之前我们学习了JavaSE,编写了Java程序,数据保存在变量、数组、集合等中,无法持久化,后来学习了IO流可以将数据写入文件,但不方便管理数据以及维护数据的关系; 后来我们学习了数据库管理软件MySQL,可以方便的管理数据1。 那么如何将它俩结合起来呢?即…

《AI旋律:创意产业的重塑与共生》

AI乐章&#xff1a;技术革命下的创意产业新生态 在数字化浪潮的推动下&#xff0c;音乐创作领域迎来了前所未有的变革——AI音乐大模型的横空出世&#xff0c;犹如一颗石子投入平静的湖面&#xff0c;激起了层层涟漪。这些模型以令人难以置信的速度和多样性&#xff0c;将音乐…

【树形dp 换根法 BFS】2581. 统计可能的树根数目

本文涉及知识点 CBFS算法 动态规划汇总 图论知识汇总 树形dp 换根法 BFS LeetCode 2581. 统计可能的树根数目 Alice 有一棵 n 个节点的树&#xff0c;节点编号为 0 到 n - 1 。树用一个长度为 n - 1 的二维整数数组 edges 表示&#xff0c;其中 edges[i] [ai, bi] &#xf…

《书生·浦语大模型实战营》第5课 学习笔记:LMDeploy 量化部署 LLM 实践

文章大纲 0.背景知识与简介计算机组成原理&#xff1a;变量的存储参数量与推理的关系 1.LMDeploy环境部署1.1 创建开发机1.2 创建conda环境InternStudio开发机创建conda环境&#xff08;推荐&#xff09;本地环境创建conda环境 1.3 安装LMDeploy 2.LMDeploy模型对话(chat)2.1 H…

【CSS in Depth2精译】1.2 继承~1.3 特殊值

文章目录 1.2 继承1.3 特殊值1.3.1 inherit 关键字1.3.2 initial 关键字1.3.3 unset 关键字1.3.4 revert 关键字 1.2 继承 除了层叠&#xff0c;还有一种给元素设置样式的方式&#xff1a;继承。经常有人把层叠与继承的概念弄混淆。它们虽然有关联&#xff0c;但也应该分辨清楚…

创新实训(十二) 项目开发——历史对话增加查询功能

必要性 随着对话记录的增加&#xff0c;根据对话名称conv_name查询对话对用户来说非常有必要实现。 实现 原来的history_chats.vue中使用了getChatList() 在onMounted时直接获取用户的所有对话记录&#xff0c;如果要实现查询功能&#xff0c;需要增加两个变量&#xff1a; …

【STM32入门学习】基于DHT20温湿度传感器数据采集和显示

目录 一、软件I2C和硬件I2C 1.1硬件I2C 1.2软件I2C 二、创建工程&#xff08;基于HAL库&#xff09; 三、实物连线 3.1DHT20 3.2串口传输&#xff1a; 四、结果演示 4.1部署文件 4.2主要代码分析 五、心得体会 一、软件I2C和硬件I2C I2C 基本读写过程: 其中S表示由主…

Android Basis - Google Keybox

什么是Keybox Android O 开始谷歌要求每台机器预制谷歌提供的 Attestion Key的需求&#xff0c;该需求要求,每台机器都预制谷歌提供的 key&#xff0c;因此需要 oem 厂商在工厂完成预制。没有预制该key 将直接导致机器 cts 相关测试项失败。Google attestation key的集合又称作…

Spring AI 介绍以及与 Spring Boot 项目整合

Spring AI 项目旨在简化使用 Spring Boot 开发包含人工智能功能的应用程序&#xff0c;提供抽象和支持多种模型提供商及矢量数据库提供商。 Spring AI 的功能特点 支持主流模型提供商&#xff1a;如 OpenAI、Microsoft、Amazon、Google 和 Huggingface 等。支持多种模型类型&a…

Retrieval-Augmented Generation for Large Language Models A Survey

Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 Abstract背景介绍 RAG概述原始RAG先进RAG预检索过程后检索过程 模块化RAGModules部分Patterns部分 RAG…

phpcms网站模板收费下载站素材图片网站源码

★模板介绍★ 本套源码&#xff0c;主要针对资源下载&#xff0c;素材/图片/模板/源码/插件/ 我们已经对源码进行了多处二次开发&#xff0c;对模板进行了深度优化&#xff0c;没有多余的无用代码。更符合收费下载站行业的标准&#xff0c;保证每位站长购买后多能直接用上&am…