You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

11ty静态网站访问环境变量报错‘process is not defined’求助

问题分析与解决方案

首先得明确一个核心差异:静态网站和Node.js服务的运行环境完全不同,这也是你遇到process is not defined的根本原因。

为什么你的尝试没生效?

  • process.env是Node.js环境特有的变量对象,浏览器端的JS代码根本不存在这个对象。你的静态站构建完成后是纯HTML/CSS/JS文件,运行在用户的浏览器里,自然读不到Node环境的变量。
  • dotenv包的作用是给Node.js进程加载本地.env文件里的变量,它只能影响Node环境的代码(比如11ty的构建脚本、你的Nodemailer API服务),对浏览器端的代码完全无效。
  • 就算你想通过11ty把环境变量注入到客户端代码里,也会导致密码明文出现在生成的HTML/JS文件中,完全违反了保密要求,这也是你说的“构建时注入”方案不可行的原因。

你可能遗漏的关键认知

静态网站的特性决定了客户端代码里不能直接存储或访问敏感信息,任何你试图放到客户端的敏感值,最终都会被用户通过查看源代码获取到。所以从一开始,把共享密码放到静态站的环境变量里就是不可行的思路。

你的最终方案为什么是合理的

你最后选择的替代方案其实是静态站场景下更安全的做法:

  • 蜜罐字段防垃圾请求:给表单添加一个隐藏的输入字段(比如命名为honeypot),正常用户看不到也不会填写,而自动化爬虫/垃圾机器人会默认填充所有字段。你的API只要检测到这个字段有值,就直接拒绝请求,能过滤大部分垃圾提交。
  • CORS Origin头控制请求来源:在你的Nodemailer API服务里配置CORS,只允许你的静态站域名发送请求。这样即使有人拿到了你的API地址,也无法从其他域名发起请求,进一步提升了安全性。

内容的提问来源于stack exchange,提问作者latinsniper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:25:13