# [Nuxt] Nuxt 3 - Runtime Config
###### tags: `Nuxt`
* 可以存放不適合寫在 JavaScript 內的資料,例如:不同環境的 API URL 或重要的 Token等機敏資料
## 範例
```typescript
// nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
// 寫在這一層的環境變數只能在 server 端取得
token: '12345',
public: {
// 寫在 public 內的環境變數可在 client 端取得
apiBaseUrl: 'https://www.xxx.com',
},
},
});
```
## .env file
:::info
* [官方文件 - Environment Variables](https://nuxt.com/docs/guide/going-further/runtime-config#environment-variables "Runtime Config · Nuxt Advanced")
* [官方文件 - .env File](https://nuxt.com/docs/guide/directory-structure/env ".env · Nuxt Directory Structure")
:::
* 建議將環境變數寫在 `.env` 內
* `.env` 檔案不會上傳至 GitHub,記得加到 `.gitignore`
* 變數名稱大寫,`NUXT` 開頭,`_` 分隔單字
```shell
# .env
NUXT_TOKEN=12345
NUXT_PUBLIC_API_BASE_URL=https://www.xxx.com
```
```typescript
// nuxt.config.ts
export default defineNuxtConfig({
runtimeConfig: {
token: '',
public: {
apiBaseUrl: '',
},
},
});
```
## useRuntimeConfig
:::info
* [官方文件 - useRuntimeConfig composable](https://nuxt.com/docs/api/composables/use-runtime-config "useRuntimeConfig · Nuxt Composables")
* [官方文件 - Accessing Runtime Config](https://nuxt.com/docs/guide/going-further/runtime-config#accessing-runtime-config "Runtime Config · Nuxt Advanced")
:::
`useRuntimeConfig()` 可以在 `setup`、`Lifecycle Hooks`、`defineNuxtPlugin()`、`server routes` 內使用
```javascript
// script setup
const runtimeConfig = useRuntimeConfig();
if (process.server) {
console.log(runtimeConfig);
}
console.log(runtimeConfig); // { app: { ... }, public: { ... } }
console.log(runtimeConfig.app);
console.log(runtimeConfig.public); // 只有 publice 內的值,無法取得 runtimeConfig 第一層的 token
```
## process.env
若因維護專案或開發習慣等因素不使用 `runtimeConfig`,想繼續使用 `process.env`,需要用 `vite` 設定
```typescript
// nuxt.config.ts
export default defineNuxtConfig({
vite: {
define: {
'process.env': process.env,
},
},
});
```
```shell
# .env
ENV=local
TOKEN=12345
WEB_URL=https://www.xxx.com
```
```javascript
// script setup
console.log('ENV: ', process.env.ENV);
console.log('TOKEN: ', process.env.TOKEN);
console.log('WEB_URL: ', process.env.WEB_URL);
```
---
:::info
建立日期:2023-08-18
更新日期:2023-09-08
:::