vue3+vite+ts中如何动态使用import.meta.env中的变量

news/2024/11/14 12:24:35/

文章目录

  • 1.使用场景
  • 2. 使用插件的方式
    • 1. 创建一个插件文件,根目录plugins/import-meta-env.d.ts
    • 2. 在vite.config.ts中引入
    • 3. 使用

1.使用场景

不想在使用import.meta.env的时候,还去找到变量文件去看

2. 使用插件的方式

1. 创建一个插件文件,根目录plugins/import-meta-env.d.ts

import type { Plugin } from "vite";
import { loadEnv } from "vite";
import path from "path";
import fsp from "fs/promises";interface EnvOptions {prefix?: string;target?: string;
}// 检查并创建目录
async function ensureDirectoryExists(dirPath: string): Promise<boolean> {try {// 尝试获取目录的状态await fsp.access(dirPath, fsp.constants.F_OK | fsp.constants.R_OK | fsp.constants.W_OK);return true;} catch (err: NodeJS.ErrnoException | any) {// 如果目录不存在,则创建目录if (err.code === "ENOENT") {try {await fsp.mkdir(dirPath, { recursive: true });return true;} catch (mkdirErr) {console.error(`创建目录失败: ${mkdirErr}`);return false;}} else {console.error(`访问目录时出错: ${err}`);return false;}}
}export default function (options: EnvOptions = {}): Plugin {return {name: "vite-plugin-import-env-compatible",configResolved(config) {const mode = config.mode;const env = loadEnv(mode, process.cwd());let prefix = options.prefix || "VITE_";let target = options.target || "src/types/import-meta-env.d.ts";let dtsContent = `/// <reference types="vite/client" />\ninterface ImportMetaEnv {\n`;Object.keys(env).forEach((key) => {if (key.startsWith(prefix)) {dtsContent += `    readonly ${key}: any; \n`;}});dtsContent += `}\n\n`;dtsContent += `interface ImportMeta { \n    readonly env: ImportMetaEnv \n}`;let dtsFilePath = path.resolve(process.cwd(), target);(async () => {let isSuccess = await ensureDirectoryExists(path.dirname(dtsFilePath));if (isSuccess) {await fsp.writeFile(dtsFilePath, dtsContent);console.log("import-meta-env.d.ts文件生成成功");}})();},};
}

2. 在vite.config.ts中引入

import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";
import ImportMetaEnvCompatible from "./plugins/env-compatible.ts";// https://vite.dev/config/
export default defineConfig(({ mode }) => {loadEnv(mode, process.cwd(), "");return {envPrefix: "VITE_", // import.meta.env需要加载的前缀plugins: [vue(), ImportMetaEnvCompatible()],resolve: {alias: {"@": path.resolve(__dirname, "src"),},},};
});

3. 使用

这个时候在vue文件中使用的时候,就会有变量提示


http://www.ppmy.cn/news/1546620.html

相关文章

记录 IDEA 搜索不到插件: marketplace plugins are not loaded

使用 IDEA 插件商店时, 一直加载不出来 提示: marketplace plugins are not loaded 按照网上提示, 使用代理, 依旧无法加载 最终解决方案 idea访问时, 被防火墙拦截 允许应用通过防火墙即可 全勾上即可 说明 文章转发自 博主尘下吹霜的记录 IDEA 搜索不到插件: marketplace…

前端监控与埋点 全总结

一、概念 前端埋点是指在网页或者应用程序中插入特定的代码&#xff0c;用于收集用户的行为数据并发送给服务器进行分析。这些数据可以包括用户的点击、浏览、输入等操作&#xff0c;帮助开发者了解用户的在其网站中的行为&#xff0c;从而进行针对性的优化和改进。 前端埋点…

go do sth和come do sth的区别

"Come do something" 语法结构 结构&#xff1a;主语 come 动词原形 其他成分。 用法&#xff1a;表示某人来到说话者的位置或某个地方&#xff0c;然后做某事。例句 Come play with us.&#xff08;过来和我们一起玩。&#xff09; Come help me with this.&…

HTTP 客户端怎么向 Spring Cloud Sleuth 传输跟踪 ID

在 Spring Cloud Sleuth 的请求链路追踪中&#xff0c;X-B3-TraceId 是第二个 ID&#xff0c;X-B3-SpanId 是第三个 ID。以下是 Sleuth 中各个追踪标识的含义&#xff1a; X-B3-TraceId&#xff1a;表示整个请求链路的全局唯一 ID&#xff0c;用于跟踪请求在多个服务间的流转。…

解答疑问,为什么在本地明明拉取了镜像,但是k8s-pod依旧ImagePullBackOff

一、根因 1、被namespace隔离了。 2、没错&#xff0c;ORI也有隔离性。 3、Kubernetes默认工作的namespace为k8s.io。 4、而部分工具运行的ns 为default.比如nerdctl 二、主流工具案例 ctr 和nerdctl可以管理ori 的 namespace. crictl则不行默认就是k8s.io。 这里注意&#…

keras实现道路裂缝检测

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

memcpy内存拷贝函数的介绍和模拟实现

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //memcpy内存拷贝函数 //void* memcpy(void* destination, const void* source, size_t num) //memcpy负责拷贝两块独立空间中的数据 int main() { int arr1[] { 1,2,3,4,5,6,7 }; int arr2[10] { 0 }; …

Unity资源打包Addressable资源保存在项目中

怎么打包先看“Unity资源打包Addressable AA包” 其中遗留一个问题&#xff0c;下载下来的资源被保存在C盘中了&#xff0c;可不可以保存在项目中呢&#xff1f;可以。 新建了一个项目&#xff0c;路径与“Unity资源打包Addressable AA包”都不相同了 1.创建资源缓存路径 在…