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
相关产品推荐
相关产品推荐

