執行階段配置
Nuxt 提供執行階段配置 API,用於在您的應用程式中公開配置和密鑰。
公開
若要將配置和環境變數公開給應用程式的其他部分,您需要在 nuxt.config
檔案中使用 runtimeConfig
選項定義執行階段配置。
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
// The private keys which are only available within server-side
apiSecret: '123',
// Keys within public, will be also exposed to the client-side
public: {
apiBase: '/api'
}
}
})
當將 apiBase
新增至 runtimeConfig.public
時,Nuxt 會將其新增至每個頁面有效負載。我們可以在伺服器和瀏覽器中通用地存取 apiBase
。
const runtimeConfig = useRuntimeConfig()
console.log(runtimeConfig.apiSecret)
console.log(runtimeConfig.public.apiBase)
公開執行階段配置可在 Vue 範本中使用
$config.public
存取。序列化
您的執行階段配置在傳遞至 Nitro 之前會被序列化。這表示任何無法序列化然後反序列化的內容(例如函數、Sets、Maps 等),都不應在您的 nuxt.config
中設定。
您可以將這些程式碼放在 Nuxt 或 Nitro 外掛或中介軟體中,而不是從您的 nuxt.config
將非序列化物件或函數傳遞到您的應用程式中。
環境變數
提供配置最常見的方式是使用 環境變數。
Nuxi CLI 內建支援在開發、建置和產生過程中讀取您的
.env
檔案。但是當您執行已建置的伺服器時,您的 .env
檔案將不會被讀取。執行階段配置值會在執行階段被自動替換為相符的環境變數。
有兩個主要要求
- 您想要使用的變數必須在您的
nuxt.config
中定義。這確保了任意的環境變數不會暴露給您的應用程式程式碼。 - 只有特別命名的環境變數才能覆寫執行階段配置屬性。也就是說,一個大寫的環境變數以
NUXT_
開頭,並使用_
分隔鍵和大小寫變更。
將
runtimeConfig
值的預設值設定為不同名稱的環境變數(例如,將 myVar
設定為 process.env.OTHER_VARIABLE
)僅在建置時有效,並會在執行階段中斷。建議使用與您的 runtimeConfig
物件結構相符的環境變數。範例
.env
NUXT_API_SECRET=api_secret_token
NUXT_PUBLIC_API_BASE=https://nuxt.dev.org.tw
nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
apiSecret: '', // can be overridden by NUXT_API_SECRET environment variable
public: {
apiBase: '', // can be overridden by NUXT_PUBLIC_API_BASE environment variable
}
},
})
讀取
Vue 應用程式
在您的 Nuxt 應用程式的 Vue 部分中,您需要呼叫 useRuntimeConfig()
來存取執行階段配置。
在用戶端和伺服器端之間,行為有所不同
- 在用戶端,只有
runtimeConfig.public
中的鍵可用,並且該物件既可寫入又是響應式的。 - 在伺服器端,整個執行階段配置皆可使用,但它是唯讀的,以避免上下文共享。
pages/index.vue
<script setup lang="ts">
const config = useRuntimeConfig()
console.log('Runtime config:', config)
if (import.meta.server) {
console.log('API secret:', config.apiSecret)
}
</script>
<template>
<div>
<div>Check developer console!</div>
</div>
</template>
安全注意事項: 請注意不要將執行階段配置金鑰暴露給客戶端,無論是透過渲染它們或將它們傳遞給
useState
。插件
如果您想在任何(自訂)插件中使用執行階段配置,您可以在您的 defineNuxtPlugin
函數內使用 useRuntimeConfig()
。
plugins/config.ts
export default defineNuxtPlugin((nuxtApp) => {
const config = useRuntimeConfig()
console.log('API base URL:', config.public.apiBase)
});
伺服器路由
您也可以在伺服器路由內使用 useRuntimeConfig
來存取執行階段配置。
server/api/test.ts
export default defineEventHandler(async (event) => {
const { apiSecret } = useRuntimeConfig(event)
const result = await $fetch('https://my.api.com/test', {
headers: {
Authorization: `Bearer ${apiSecret}`
}
})
return result
})
為執行階段配置設定類型
Nuxt 嘗試使用 unjs/untyped 從提供的執行階段配置自動產生 TypeScript 介面。
但也可以手動為您的執行階段配置設定類型
index.d.ts
declare module 'nuxt/schema' {
interface RuntimeConfig {
apiSecret: string
}
interface PublicRuntimeConfig {
apiBase: string
}
}
// It is always important to ensure you import/export something when augmenting a type
export {}
nuxt/schema
作為方便終端使用者存取 Nuxt 專案中使用的 schema 版本的工具提供。模組作者應改為擴充 @nuxt/schema
。