iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

https://ithelp.ithome.com.tw/upload/images/20231007/20141551RP5xK6CXSp.jpg

前言

本章節來介紹環境變數在 Astro 當中,並且可以如何運用它。

為什麼需要環境變數?

在真實世界中會需要面臨不同的開發環境,像是:開發、生產……等階段,而每個階段有可能會有自己對應的 API 伺服器,因此需要連接不同的伺服器位址,因此與其寫死相關程式片段,我們可以透過環境變數來創建一個「存在於專案範圍內的變數」,來解決相同的程式需要應對不同環境的問題。同時環境變數允許開發人員將敏感信息(如 API 金鑰或數據庫密碼)存儲在安全的位置,而不是寫死在代碼中。因此總結以下幾點使用環境變數的好處:

  1. 安全性
  2. 易維護
  3. 易配置

獲取環境變數

變數將會暴露在 import.meta.env 物件上,以下是一些預設的環境變數與解釋:

環境變數也可以用於檢測當前專案的模式並採取一些行動,像是:在開發模式時顯示草稿狀態的文件,但在生產模式時則隱藏。

const publishedPosts = await getCollection('post', (post) => (import.meta.env.PROD ? !post.data.isDraft : true));

使用環境變數

Astro 使用 Vite 內建的環境變數,因此它們使用環境變數的方式是完全相同的,可以使用 Vite 的任一方法來處理。

創建 .env 檔案

// 只在伺服器上運行有效
PUBLIC_IMAGEAPI=https://picsum.photos
// 任何地方都有效
SECRET_PASSWORD=password123

舉例以上的例子,只要有 PUBLIC_ 前墜名稱的環境變數將可以在整個專案不管是伺服端還是客戶端存取到,但前墜 SECRET_ 的環境變數則只能在伺服端存取得到。

// 使用環境變數
fetch(`${import.meta.env.PUBLIC_IMAGEAPI}/300/300`)

創建不同環境的 .env 檔案

可以在文件名稱上附加模式名稱(像是 productiondevelopment)如: .env.production.env.development,這樣該檔案內的環境變數只會在對應的模式下生效。

透過 CLI 添加環境變數

環境變數也可以透過 CLI 在運行時添加,但要留意這種方式設置的變數將會在全專案中可被使用,包含客戶端上:

IMAGEAPI=https://picsum.photos npm run dev

延伸閱讀


上一篇
Day21 - 部屬升空
下一篇
Day23 - 路徑別名
系列文
網頁開發沒有這麼簡單過!實際案例帶你上手 Astro.js30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言