为什么 API Key 不能写进代码?用钥匙和钥匙串的比喻讲清 .env、环境变量和 .gitignore,顺带解决泄露和改了不生效两个必踩的坑

你在 Vibe Coding 的时候,是不是经常碰到这种情况:项目要调用大模型、要接地图、要存数据,AI 一定会跟你说——先去某个地方申请一个 API Key,然后把它填到一个叫 .env 的文件里。
没有这一步,项目的核心功能就跑不起来。
那这个 API Key 到底是个什么东西?为什么非要专门整一个 .env 文件来放它?直接写在代码里行不行?
这一期就把这几个问题讲明白:API Key 是什么、.env 是什么、为什么不能把 API Key 写进代码,以及 Vibe Coding 的时候这些东西该怎么处理。
先说 API Key。
它就像一把钥匙。项目里需要用到其他服务的时候,就得申请一把钥匙来调用——比如调用大模型、接地图接口、接天气接口。
举个例子,你可以去 DeepSeek 官网 申请一个 DeepSeek 的 API Key。有了它,你就能在自己的项目里接入 AI 大模型,调用 DeepSeek 的思考模型帮你处理任务。
API Key 一般就是一串字符。它有两个作用:

注意:记账的时候,它只认钥匙,不认人。万一有一天有人复制了你的 API Key,他就能直接拿去用,而这笔账是记在你头上的。
问题: 那这把钥匙放哪呢?很多新手的第一反应是——直接写在代码里呗。
结论:绝对不行。
原因: 你的代码很容易流出去:
你把 API Key 写进代码,就等于把钥匙挂在了门外面。一旦泄露,第二天你充值的账户余额可能就被清空了。

所以项目里专门有一个文件来存放这些钥匙,就是 .env。它是你这个项目的钥匙串。
打开它你会看到这样的结构:左边一个名字,右边一串字符,中间一个等号。
名字=钥匙
等号右边那串就是钥匙,这就是所谓的环境变量。

那程序是怎么用这些钥匙的?它启动的时候,会拿着左边这个名字,自己去 .env 里读。
所以代码里只会出现左边的名字,不会出现右边的钥匙——你的 API Key 就安全了。
除了本地会用到 API Key,如果想把代码搬到线上部署,环境变量又该怎么配置?分两种情况。
这种情况其实最简单:配置方法和你在自己电脑上基本没区别——同样把 .env 文件放在项目里,本地怎么配,服务器上就怎么配。
平台会要求你上传代码,但千万不要把 .env 文件也一起传上去,这和把家里的钥匙放在家门口没什么区别。
正确做法是:找到托管平台的「环境变量」设置入口,把名字和钥匙填一份。程序启动的时候,平台就从这个设置里读取,不会把钥匙泄露出去。
不管是哪种情况,原则都一样:代码里只有名字,钥匙永远不跟代码走。

最后一个问题:上传代码的时候,怎么保证 .env 不会被你手滑一起传上去?
这就要靠另外一个文件,叫 .gitignore。翻译过来就是「git 你别管它」。
它就是一份名单——写在这个名单上的文件,上传存档的时候会被自动挡在门外。
一般情况下,项目创建的时候 .env 就已经在这个名单里了。

别慌。比如我在录视频的时候申请 DeepSeek 的 API Key 没有打码,这把钥匙就已经暴露出来了,任何人拿到它都能用我的账户去调用 DeepSeek 的接口。
处理办法很简单:回到申请钥匙的那个平台后台,把这把旧钥匙作废。 已经作废的 API Key 不能再继续使用,重新申请一个新的就可以了。

这是新手一定会遇到的情况。
原因: 程序是启动的时候读一次,不是随时盯着这个文件。
解决: 改完钥匙串,记得把程序重启一遍。
以上就是 API Key 和 .env 的全部内容。最后快速回顾一下:
| 概念 | 是什么 | 关键点 |
|---|---|---|
| API Key | 调用别人服务的一把钥匙 | 只认钥匙不认人,泄露了账记在你头上 |
| .env | 项目的钥匙串 | 左边名字、右边钥匙,程序启动时自己去读 |
| 环境变量 | .env 里那一行行「名字=钥匙」 | 代码里只出现名字 |
| .gitignore | 一份不上传的名单 | .env 默认就在这个名单里 |
| 托管平台部署 | 在平台的环境变量入口填一份 | 绝不上传 .env 文件 |
整件事其实就三句话:
代码里只写名字;钥匙收在
.env里;.env不上传、不发给任何人。
记住这三句,你的钥匙就丢不了。
