跳至主要内容

direnv

direnv 是一個強大的 CLI 工具,專門用來在進入某個目錄時自動載入(或移除)該目錄下定義的環境變數。這在開發多個專案、使用多種語言與工具時非常有用,可以讓每個專案擁有獨立的環境設定,不需要手動切換或覆蓋環境變數


🌱 direnv 是什麼?

簡單說,direnv 會自動載入並執行每個資料夾中的 .envrc 檔案,裡面可以設定環境變數或執行 shell 命令。當你離開這個資料夾時,它會「卸載」這些設定,回到原始環境。


🔧 安裝 direnv

macOS 安裝:

brew install direnv

加入 shell(以 zsh 為例):

在你的 ~/.zshrc 加入:

eval "$(direnv hook zsh)"

重新啟動 shell 或執行 source ~/.zshrc


📁 使用情境範例

📦 1. 每個專案使用不同的 Python/Node/Go 版本

假設你在某個專案使用 Python 3.11,另一個使用 Python 3.8:

# 在每個專案資料夾中新增 .envrc:
echo 'layout python python3.11' > .envrc
direnv allow

或者使用 pyenv 管理:

echo 'export PYENV_VERSION=3.11.3' > .envrc
direnv allow

☁️ 2. 為每個專案設定獨立的 API Key、環境變數

# .envrc
export AWS_ACCESS_KEY_ID="xxx"
export AWS_SECRET_ACCESS_KEY="yyy"
export DATABASE_URL="postgres://user:pass@localhost:5432/db"

這樣你只要 cd 到該資料夾,變數就會自動載入;離開就會清除。


🧪 3. 自動啟動虛擬環境 / docker / 開發服務

# .envrc
layout python
poetry shell

# 或者
docker compose up -d

這樣當你 cd 進專案目錄時,開發環境就自動啟動,非常適合微服務開發。


🪄 4. 整合 Node.js(透過 fnm、nvm)

# .envrc
use node 18

需搭配 fnmasdf,這些工具可自動在專案中切換 node 版本。


⚠️ 安全性提醒

當你第一次在某個目錄加 .envrc,你必須明確執行:

direnv allow

這是為了安全,防止惡意 .envrc 自動執行。


✅ 總結

使用情境為什麼用 direnv
多專案、多環境開發自動切換環境變數,避免污染全域設定
使用多種版本管理工具(如 pyenv, nvm)自動套用專案中指定的版本
團隊專案需一致開發環境設定.envrc 可版控(建議搭配 .envrc.local 管機密)
減少 shell 指令疲勞不再手動 source 環境檔或啟動 venv

Assisted by ChatGPT