目錄
?
什么是 .env 文件?
為什么要使用 .env 文件?(好處)
如何使用 .env 文件?
通用步驟:
具體技術棧中的實現:
最佳實踐和注意事項
總結
?
什么是 .env 文件?
.env
文件(英文全稱 environment,即“環境”)是一個純文本文件,用于??存儲應用程序的環境變量??。每一行定義一個變量,格式通常是 鍵=值
對,通常我們創建好之后丟在項目的根目錄下
例如,一個典型的 .env
文件可能長這樣:
# 數據庫連接配置
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=my_secret_password# 第三方API密鑰
API_KEY=abcdef123456
STRIPE_SECRET_KEY=sk_test_...# 應用運行配置
NODE_ENV=development
DEBUG=true
APP_PORT=3000
為什么要使用 .env 文件?(好處)
使用 .env
文件主要基于以下幾個核心好處:
-
??安全性(最重要)??
- ??將敏感信息與代碼分離??:像數據庫密碼、API 密鑰、加密鹽等絕對不應該直接硬編碼在源代碼中。如果代碼被上傳到公開的Git倉庫(如GitHub),這些秘密就會瞬間暴露。
.env
文件通常被添加到.gitignore
中,確保它不會被提交到版本控制系統,從而保護了敏感信息。
-
??配置管理??
- ??區分不同環境??:你可以為不同的運行環境(開發、測試、生產)創建不同的
.env
文件(如.env.development
,.env.production
),輕松管理不同的配置,而無需修改代碼。 - ??示例??:
- 開發環境 (
.env.development
):使用本地的測試數據庫。 - 生產環境 (
.env.production
):使用云上正式數據庫的地址和密碼。
- 開發環境 (
- ??區分不同環境??:你可以為不同的運行環境(開發、測試、生產)創建不同的
-
??協作便利性??
- 團隊協作時,你可以在項目中提供一個示例文件(如
.env.example
),里面列出項目需要的所有環境變量鍵名,但不包含真實的值。 - 新成員克隆項目后,只需復制
.env.example
為.env
,然后填入自己的本地配置值即可,非常清晰方便。
- 團隊協作時,你可以在項目中提供一個示例文件(如
-
??可移植性??
- 應用程序的行為由環境變量控制,使得它可以在任何地方(你的筆記本、同事的電腦、云服務器、Docker容器)運行,只要提供相應的
.env
文件即可,應用本身無需改變。
- 應用程序的行為由環境變量控制,使得它可以在任何地方(你的筆記本、同事的電腦、云服務器、Docker容器)運行,只要提供相應的
如何使用 .env 文件?
使用方法根據你使用的編程語言和框架有所不同,但核心流程是一致的。
通用步驟:
- ??創建文件??:在你的項目根目錄下創建一個名為
.env
的文件。 - ??定義變量??:在文件中以
KEY=VALUE
的格式寫入你的配置。??注意:值通常不需要引號??,除非值本身包含空格或特殊字符。DB_HOST=localhost DB_USER=admin
- ??忽略文件??:??務必??將
.env
添加到你的.gitignore
文件中,以防止它被意外提交。# .gitignore .env
- ??讀取文件??:在你的應用程序中,使用特定的庫或模塊來加載
.env
文件,并將其中的變量注入到應用的環境變量中。
具體技術棧中的實現:
??1. Node.js (使用 dotenv
庫)??
這是最經典的用法。
- ??安裝??:
npm install dotenv
- ??在應用入口文件(如
app.js
或index.js
)的最頂部加載??:require('dotenv').config(); // 默認會讀取項目根目錄下的 .env 文件// 現在 process.env 中就有了 .env 文件里定義的變量 console.log(process.env.DB_HOST); // 輸出 'localhost' console.log(process.env.DB_USER); // 輸出 'admin'
- 許多現代框架(如 Next.js, Vue CLI, Create React App)已經內置了
dotenv
支持,你只需創建文件即可,無需顯式調用require(‘dotenv’).config()
。
??2. Python (使用 python-dotenv
庫)??
- ??安裝??:
pip install python-dotenv
- ??使用??:
from dotenv import load_dotenv import osload_dotenv() # 加載 .env 文件中的變量到 os.environdb_host = os.getenv('DB_HOST') db_user = os.getenv('DB_USER')
??3. PHP (使用 vlucas/phpdotenv
)??
- ??安裝 (通過Composer)??:
composer require vlucas/phpdotenv
- ??使用??:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load();$dbHost = $_ENV['DB_HOST']; $dbUser = $_ENV['DB_USER'];
??4. 在 Docker 中使用??
在 Docker 世界中,環境變量尤為重要。你可以在 docker run
命令中直接使用 --env-file
參數來指定 .env
文件。
docker run --env-file .env -p 80:80 my-app
或者在 docker-compose.yml
文件中指定:
version: '3'
services:my-app:image: my-appenv_file: .env
最佳實踐和注意事項
- ??不要提交
.env
??:再次強調,這是安全底線。通過.gitignore
確保它不會進入版本歷史。 - ??提供
.env.example
??:在倉庫中包含一個示例文件,列出所有需要的鍵,方便其他開發者。# .env.example DB_HOST= DB_USER= DB_PASS= API_KEY=
- ??不要濫用??:并非所有配置都適合放在
.env
文件中。它更適合??與環境相關或敏感的??配置。對于應用內部固定不變的配置,使用專門的配置文件可能更合適。 - ??變量命名??:通常使用大寫字母和下劃線 (
_
) 來命名,如AWS_ACCESS_KEY_ID
,這是一種廣泛接受的約定。 - ??生產環境??:在云服務器或容器平臺(如 Heroku, Vercel, AWS, Docker Swarm, Kubernetes)上,通常有專門的管理界面讓你設置環境變量,而無需上傳
.env
文件本身。在這些平臺上,你應該使用其提供的配置工具。
總結
.env
文件是一個簡單卻極其強大的工具,它通過 ??“配置與代碼分離”?? 的原則,極大地提升了項目的??安全性、可維護性和可移植性??。無論你是全棧、后端還是前端開發者,掌握它都是必備技能。
?