html环境变量注入本质是构建时硬编码,非运行时读取;webpack需通过html-webpack-plugin的templateparameters传入json可序列化值,vite推荐vite-plugin-html但需注意转义。

HTML 本身不支持运行时读取环境变量,所谓“自动注入”,本质是构建阶段把值写进最终生成的 HTML 字符串里——不是 process.env,而是提前算好、硬编码进去。
webpack 项目用 html-webpack-plugin 的 templateParameters
这是最常用也最容易踩坑的方式。它只在构建时生效,且要求所有传入的值必须是 JSON 可序列化、静态可求值的。
-
templateParameters里的值不能直接写process.env.API_HOST,得先解构:比如API_HOST: process.env.API_HOST || 'https://dev.example.com' - 模板语法(如
)依赖插件默认渲染逻辑,如果项目里同时用了ejs-loader或handlebars-loader却没配对,就会原样输出模板字符串 - 注入后建议用单引号包裹 JS 字符串:
<script>window.API_HOST = '<%= htmlWebpackPlugin.options.templateParameters.API_HOST %>'</script>,避免双引号嵌套或特殊字符引发语法错误
Vite 项目优先用 vite-plugin-html
它比 Webpack 方案更简洁,但默认不做 HTML 转义,字符串含 "、 等字符时会直接破坏 HTML 结构或 JS 语法。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 必须手动
JSON.stringify所有要注入的字符串值,例如:inject: { data: { API_HOST: JSON.stringify(import.meta.env.VITE_API_HOST) } } - 插件注入的脚本默认插入
底部,确保它早于你自己的 JS 执行;若你 JS 在底部,基本没问题;若 JS 是defer或模块类型,需确认执行顺序 - 别漏掉
VITE_前缀 —— Vite 只会暴露以VITE_开头的环境变量到import.meta.env,其他变量读不到
避免混淆 DefinePlugin 和 HTML 注入
DefinePlugin 对 HTML 文件完全无效,它只做 JS 模块内的文本替换。很多人装了 HTMLWebpackInjectEnvPlugin 就以为 JS 里也能直接用 process.env.API_HOST,结果报 ReferenceError: process is not defined。
-
DefinePlugin适合定义 JS 内部常量,比如__DEV__或API_VERSION,但不能用于 HTML 模板 -
HTMLWebpackInjectEnvPlugin会生成类似<script>window.env = {API_HOST:"..."}</script>的代码,JS 必须通过window.env.API_HOST访问,而不是process.env - 如果项目有多个
HtmlWebpackPlugin实例(比如多页应用),每个实例都得单独配一遍插件,漏一个就少一个页面的变量
真正容易被忽略的是:所有这些方案都发生在构建时,变量一旦写死进 HTML,就无法在浏览器里动态切换。如果需要运行时配置(比如用户登录后换域名),得靠接口拉取或 URL 参数解析,而不是“注入”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










