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

Vue3 项目环境变量配置(Vite)

环境变量

它的主要作用让开发者区分不同的运行环境,读取不同环境的相关配置信息,比如开发环境和生产环境使用不同的 API 前缀等。

Vite 是通过 import.meta.env 对象暴露环境变量的。

在组件中获取环境变量方式如下:

<script setup lang="ts">
    console.log(import.meta.env);
</script>

<template>
  <div>我是一个组件</div>
</template>

 输出:

{
    "BASE_URL": "/", //部署应用时的URL前缀
    "DEV": true, //应用是否运行在开发环境 (永远与 import.meta.env.PROD相反)
    "MODE": "development", //应用运行的模式
    "PROD": false, //应用是否运行在生产环境(使用 NODE_ENV='production' 运行开发服务器或构建应用时使用 NODE_ENV='production' )
    "SSR": false  //应用是否运行在 server 上
}

.env 文件 

Vite 使用 dotenv 从你的 环境目录 中的下列文件加载额外的环境变量:

.env                # 所有情况下都会加载
.env.local          # 所有情况下都会加载,但会被 git 忽略
.env.[mode]         # 只在指定模式下加载
.env.[mode].local   # 只在指定模式下加载,但会被 git 忽略

配置额外的额环境变量

也可以配置额外的额环境变量,我们需要在根目录新建 .env[mode] 文件,并且环境变量必须以 VITE_ 开头,才会暴露给经过 vite 处理的代码。例如下面这些环境变量:

VITE_SOME_KEY=123
DB_PASSWORD=foobar

输出:

console.log(import.meta.env.VITE_SOME_KEY) // "123"
console.log(import.meta.env.DB_PASSWORD) // undefined

只有 VITE_SOME_KEY 会被暴露为 import.meta.env.VITE_SOME_KEY 提供给客户端源码,而 DB_PASSWORD 则不会。

在配置中使用环境变量

环境变量通常可以从 process.env 获得。

注意:Vite 默认是不加载 .env 文件的,因为这些文件需要在执行完 Vite 配置后才能确定加载哪一个,举个例子,root 和 envDir 选项会影响加载行为。不过当你的确需要时,你可以使用 Vite 导出的 loadEnv 函数来加载指定的 .env 文件。

import { defineConfig, loadEnv } from 'vite'

export default defineConfig(({ command, mode }) => {
  // 根据当前工作目录中的 `mode` 加载 .env 文件
  // 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。
  const env = loadEnv(mode, process.cwd(), '')
  return {
    // vite 配置
    define: {
      __APP_ENV__: JSON.stringify(env.APP_ENV),
    },
  }
})

配置TypeScript 的智能提示

在 src 目录下创建一个 vite-env.d.ts 文件,接着按下面这样增加 ImportMetaEnv 的定义:

/// <reference types="vite/client" />

interface ImportMetaEnv {
  readonly VITE_APP_TITLE: string
  // 更多环境变量...
}

interface ImportMeta {
  readonly env: ImportMetaEnv
}

HTML 环境变量替换

Vite 还支持在 HTML 文件中替换环境变量。import.meta.env 中的任何属性都可以通过特殊的 %ENV_NAME% 语法在 HTML 文件中使用:

<h1>Vite is running in %MODE%</h1>
<p>Using data from %VITE_API_URL%</p>

注意:如果环境变量在 import.meta.env 中不存在,比如不存在的 %NON_EXISTENT%,则会将被忽略而不被替换

模式

默认情况下,开发服务器 (dev 命令) 运行在 development (开发) 模式,而 build 命令则运行在 production (生产) 模式。

这意味着当执行 vite build 时,它会自动加载 .env.production 中可能存在的环境变量:

# .env.production
VITE_APP_TITLE=My App

在你的应用中,你可以使用 import.meta.env.VITE_APP_TITLE 渲染标题。

在某些情况下,若想在 vite build 时运行不同的模式来渲染不同的标题,你可以通过传递 --mode 选项标志来覆盖命令使用的默认模式。例如,如果你想在 staging (预发布)模式下构建应用:

vite build --mode staging

还需要新建一个 .env.staging 文件:

# .env.staging
VITE_APP_TITLE=My App (staging)

由于 vite build 默认运行生产模式构建,你也可以通过使用不同的模式和对应的 .env 文件配置来改变它,用以运行开发模式的构建:

# .env.testing
NODE_ENV=development

注意:NODE_ENVprocess.env.NODE_ENV)和模式是两个不同的概念,NODE_ENV 和模式的不同值也会反映在相应的 import.meta.env 属性上。


http://www.kler.cn/a/324536.html

相关文章:

  • L11.【LeetCode笔记】有效的括号
  • 整数唯一分解定理
  • GEE下载ERA5-Land气象数据(1950-至今,降水、温度)
  • 【第三课】Rust变量与数据类型(二)
  • 数据研发基础 | 什么是流批一体
  • 猎板PCB罗杰斯板材的应用案例
  • 2024年7月大众点评全国小吃快餐前百名城市分析
  • U盘打开提示要格式化:深度解析、恢复策略与预防之道
  • CSS列表
  • 每天学习一个技术栈 ——【Celery】篇(2)
  • FTP 服务器 linux安装
  • 面试速通宝典——5
  • 解锁免费数据恢复工具的潜力,找回珍贵数据记忆
  • android设计模式的建造者模式,请举例
  • RabbitMQ的各类工作模式介绍
  • SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异
  • 支持云边协同的「物联网平台+边缘计算底座」
  • tcpdump捕获指定端口的网络流量并实时输出
  • OpenCV_自定义线性滤波(filter2D)应用详解
  • 护眼灯行业分水岭渐显,书客革命性创新成为企业扩容市场的第一动力
  • qt6 使用QPSQL
  • 【k8s】:DevOps 模式详解
  • 物联网系统中模拟温度传感器测温方案
  • 设计模式之享元(Flyweight)模式
  • 设计模式小记:构造器
  • QT九月28日