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

【JS】import.meta.env,process.env,window三种环境变量获取方式的区别

三种环境变量获取方式的区别:

import.meta.env:

  • 这是 Vite 提供的一种访问环境变量的方式
  • 在 Vite 项目中,环境变量会以 VITE_ 开头
  • 例如:import.meta.env.VITE_APP_TITLE
  • 在开发环境中,这些变量会被自动注入
  • 在 uni-app中,HBuilderX 也会注入一些以 UNI_ 开头的变量

process.env:

  • 这是 Node.js 环境中访问环境变量的标准方式
  • 在 Node.js 环境中,所有环境变量都可以通过 process.env 访问
  • 例如:process.env.NODE_ENV
  • 在浏览器环境中,process.env 可能不存在或为空对象
  • 在 uni-app 中,HBuilderX 会将一些环境变量注入到 process.env 中

window 对象:

  • 这是浏览器环境中的全局对象。可以通过 window 对象访问全局变量和函数,例如:window.__UNI_ENV__

  • 在 uni-app 中,HBuilderX 会将一些环境变量注入到 window 对象中。这种方式只在浏览器环境中有效在您的代码中,我们尝试从这三种不同的来源获取环境变量,以确保在不同的运行环境中都能正确获取到环境变量。这是因为:

    • 在开发环境中,import.meta.env 可能包含环境变量
    • 在 Node.js 环境中,process.env 可能包含环境变量
    • 在浏览器环境中,window 对象可能包含环境变量

通过尝试这三种不同的来源,我们可以确保在不同的运行环境中都能正确获取到环境变量。

在 uni-app 中,HBuilderX 会根据您在 package.json 中配置的环境变量,将这些变量注入到不同的对象中。例如:

{"uni-app": {"scripts": {"dev": {"title": "H5 测试环境","env": {"UNI_PLATFORM": "h5","UNI_VITE_API_BASE": "http://apitest.**测试服**.com/","UNI_NODE_ENV": "development"}},"prod": {"title": "H5 生产环境","env": {"UNI_PLATFORM": "h5","UNI_VITE_API_BASE": "https://api.***正式服**.com/","UNI_NODE_ENV": "production"}}}}
}

当您在 HBuilderX 中选择不同的运行环境时

选择"H5 测试环境"时:

  • import.meta.env.UNI_NODE_ENV 将被设置为 "development"
  • import.meta.env.UNI_VITE_API_BASE将被设置为 http://apitest.******.com/
  • process.env.UNI_NODE_ENV 也会被设置为相同的值
    window.UNI_ENV 可能会被设置为 "development"

选择"H5 生产环境"时:

  • import.meta.env.UNI_NODE_ENV 将被设置为 "production"
  • import.meta.env.UNI_VITE_API_BASE 将被设置为 -"https://api.pawalive.com/"
  • process.env.UNI_NODE_ENV 也会被设置为相同的值
  • window.UNI_ENV 可能会被设置为 "production"

这就是为什么在我们的 config/env.js 文件中,我们尝试从这三个不同的来源获取环境变量,以确保在任何情况下都能获取到正确的环境配置。
您可以通过在代码中添加以下调试语句来查看这些变量的实际值:

console.log('环境变量来源:', {importMetaEnv: {NODE_ENV: import.meta.env.UNI_NODE_ENV,API_BASE: import.meta.env.UNI_VITE_API_BASE},processEnv: {NODE_ENV: process.env.UNI_NODE_ENV,API_BASE: process.env.UNI_VITE_API_BASE},windowEnv: {ENV: window.__UNI_ENV__,API_URL: window.__UNI_API_URL__}
});

这样您就可以看到在不同环境下这些变量的具体值,帮助您理解环境变量是如何被设置的。


文章转载自:

http://eFEVfGHO.Lxyyp.cn
http://qUvsip8w.Lxyyp.cn
http://RIUiSVQr.Lxyyp.cn
http://bDHqvdfy.Lxyyp.cn
http://drQE5ttV.Lxyyp.cn
http://LNDUI11x.Lxyyp.cn
http://9lQ6T0rr.Lxyyp.cn
http://JCNDjgal.Lxyyp.cn
http://nSs38LhU.Lxyyp.cn
http://Lj1YoXzc.Lxyyp.cn
http://2bDeFa38.Lxyyp.cn
http://cnOs1fhP.Lxyyp.cn
http://5ZdxHgtv.Lxyyp.cn
http://SbYvDrtW.Lxyyp.cn
http://7TSGlii5.Lxyyp.cn
http://TlAnTJKN.Lxyyp.cn
http://9GxgSzet.Lxyyp.cn
http://YJgGjPex.Lxyyp.cn
http://Y68g82jd.Lxyyp.cn
http://Vw5VX7gu.Lxyyp.cn
http://C2MswOIf.Lxyyp.cn
http://fgK3TEma.Lxyyp.cn
http://LHyZW1HG.Lxyyp.cn
http://eyr1yLU7.Lxyyp.cn
http://70GWzGMo.Lxyyp.cn
http://75eqpNTA.Lxyyp.cn
http://aiWIH3JY.Lxyyp.cn
http://UFlYqTiu.Lxyyp.cn
http://Rvdt4SFD.Lxyyp.cn
http://MJQd7XxG.Lxyyp.cn
http://www.dtcms.com/a/375956.html

相关文章:

  • 交付只是起点:从“纸上蓝图”到“价值闭环”的保障实践,数字孪生保障落地的“三重防护网
  • LLM大模型-大模型 API 集成使用、部署本地大模型(huggingface、modelscope)、实现Qwen和Deepseek本地部署
  • Redis的入门与应用
  • pybind11错误书
  • 在 PostgreSQL中查看有哪些用户和用户权限
  • ctfshow- web入门-XXE漏洞
  • 六级第二关———坐地铁(1)
  • 实用 html 小工具
  • C#(链表创建与原地反转)
  • 光伏MPPT——拓扑结构及发波方式
  • Flink通讯超时问题深度解析:Akka AskTimeoutException解决方案
  • 美团核销接口助力第三方供应商拓展市场份额的策略
  • 基于dijkstra算法的WSN网络MAC协议matlab仿真,分析网络延迟与网络开销
  • 《Linux运维工程师基础技能测试简答题》
  • CPUID
  • aiagent知识点
  • DPO原理 | 公式推导
  • 代码随想录算法训练营第三十九天|62.不同路径 63.不同路径ll
  • Redis(主从复制)
  • 嵌入式 - ARM3
  • 【QT随笔】结合应用案例一文完美概括QT中的队列(Queue)
  • lesson57:CSS媒体查询完全指南:从基础语法到移动端响应式设计最佳实践
  • 定制 ResourceBundle 的实现与 DuiLib 思想在 Chromium 架构下的应用解析
  • 常用排序算法核心知识点梳理
  • Dubbo3序列化安全机制导致的一次生产故障
  • 《2025年AI产业发展十大趋势报告》四十七
  • 传统项目管理中如何控制进度
  • C 语言第一课:hello word c
  • Cartographer 位姿推测器pose_extrapolator
  • Matlab机器人工具箱使用5 轨迹规划