vite.config.js 中 import.meta.env 无提示是因为它仅在浏览器/Vite构建上下文中存在,配置文件运行于Node环境,应使用 process.env 或 loadEnv() 读取;TS提示需配置 tsconfig.json 的 types 包含 "node" 和 "vite/client",并用 defineConfig 或 JSDoc 注解类型。

为什么 vite.config.js 里写 import.meta.env 没提示
因为 import.meta.env 是运行时注入的全局对象,不是 Node.js 原生 API,VSCode 默认不识别它在配置文件中的类型——vite.config.js 是在 Node 环境下执行的,而 import.meta.env 只存在于浏览器或 Vite 构建上下文中。
你真正该用的是 process.env 或 Vite 提供的 loadEnv() 函数。Vite 启动时会把 .env 文件内容挂到 process.env 上,所以配置文件中应这样读:
import { defineConfig, loadEnv } from 'vite'
<p>export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
return {
server: {
port: Number(env.VITE_PORT) || 5173
}
}
})</p>
注意:loadEnv(mode, dir, prefix) 的第三个参数传空字符串 '' 才能加载所有变量(包括非 VITE_ 开头的),否则默认只读 VITE_ 前缀变量。
vite.config.js 怎么获得完整的 TypeScript 提示
纯 JS 项目也建议加 jsconfig.json;TS 项目必须确保根目录有 tsconfig.json,且 compilerOptions.types 包含 "vite/client":
-
"vite/client"提供了import.meta.env的类型定义(但仅用于客户端代码,**不适用于 vite.config.js**) -
vite.config.js需要的是 Node 类型支持,所以还要确保compilerOptions.types包含"node" - 如果用 TS 写配置文件(
vite.config.ts),必须安装@types/node,并确认 VSCode 工作区使用的 TypeScript 版本与项目一致(右下角点击可切换)
最简有效的 tsconfig.json 片段:
{
"compilerOptions": {
"types": ["node", "vite/client"],
"moduleResolution": "Node"
}
}
defineConfig 不提示?缺的是 JSDoc 或类型导入
defineConfig 本身是函数,但 VSCode 要靠类型信息才能补全。两种方式任选其一即可:
HISUI 前端框架基础开发指南。HISUI 是基于 easyui 二次开发的 jQuery UI 组件库,专为医疗信息系统设计。当涉及 HISUI 组件开发、jQuery easyui 表格/表单/布局/窗口、医疗系统前端页面编写时使用此 skill。 涵盖 40 个组件的官方文档参考,支持声明式与编程式两种初始化方式,提供 $cm/$m 数据访问方法。
- 用
import { defineConfig } from 'vite'+ 默认导出:这是推荐方式,类型自动注入 - 不用
defineConfig,改用 JSDoc 注释(适合纯 JS 项目):/** @type {import('vite').UserConfig} */<br>export default { ... }
别漏掉 import('vite').UserConfig 中的单引号和点号——VSCode 对这个字符串格式敏感,写错就失去所有提示。
环境变量名写错却没报红?TypeScript 没校验 process.env
process.env 默认是 { [key: string]: string | undefined },所以 process.env.VITE_API_URL 写成 VITE_API_ULR 也不会报错。
想让拼写错误被发现,得手动增强类型:
- 创建
src/env.d.ts(哪怕项目没有 src 目录,也建议放根目录) - 内容写:
/// <reference types="vite/client"></reference><br>interface ImportMetaEnv {<br> readonly VITE_API_URL: string<br> readonly VITE_APP_NAME: string<br>} - 这样
process.env.VITE_API_URL就能享受同等级别的类型检查(注意:不是import.meta.env,而是借用了它的定义结构)
这个文件不会被构建,只服务 IDE;但它能拦住 80% 的低级拼写失误。
真正容易被忽略的是:vite.config.js 里的环境变量读取逻辑和客户端代码完全隔离——你在 .env 里改了 VITE_API_URL,配置文件里用 process.env.VITE_API_URL 读,组件里用 import.meta.env.VITE_API_URL 读,两者互不感知、也不共享类型系统。别指望一个定义管两边。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










