هدف از پیکربندی در Nuxt
Nuxt بهصورت پیشفرض با تنظیمات استاندارد و قابل استفاده شروع میکند.
اما شما میتوانید با فایلهای زیر رفتار آن را تغییر دهید:
- nuxt.config.ts → برای تنظیمات اصلی، ماژولها، رندر، مسیرها و سرور
- app.config.ts → برای تنظیمات ظاهری و عمومی (مثل عنوان سایت و تم)
ساختار پایه فایل nuxt.config.ts
فایل nuxt.config.ts تنظیمات اصلی برنامه را شامل میشود:
export default defineNuxtConfig({
// تنظیمات شما
})
در این فایل میتوانید:
- ماژول اضافه کنید
- حالت رندر را تغییر دهید (SSR, SSG, SPA)
- رفتار پروژه را شخصیسازی کنید
- پیکربندی ابزارهایی مثل Vite، PostCSS یا Nitro را بنویسید
تنظیمات مخصوص محیطها (Environment Overrides)
میتوانید برای هر محیط (مثلاً production، development یا staging) پیکربندی جدا داشته باشید:
export default defineNuxtConfig({
$production: {
routeRules: {
'/**': { isr: true },
},
},
$development: {},
$env: { staging: {} },
})
اجرای Nuxt با محیط خاص:
npx nuxt build --envName staging
نکته: برای پروژههایی که روی چند سرور یا محیط اجرا میشوند (مثل Vercel یا سرور تست)، این ویژگی بسیار مفید است.
runtimeConfig — متغیرهای محیطی و توکنهای خصوصی
برای مقادیری که باید بعد از build قابل تغییر باشند (مثل API key یا secretها)، از runtimeConfig استفاده کنید:
export default defineNuxtConfig({
runtimeConfig: {
apiSecret: '',
public: {
apiBase: '/api'
}
}
})
در .env:
NUXT_API_SECRET=my_secret_token
در کد Vue:
const config = useRuntimeConfig()
فقط مقادیر درون
publicدر سمت کاربر (client) قابل دسترسی هستند.
هرگز اطلاعات حساس را آنجا قرار ندهید.
app.config.ts — تنظیمات ثابت و ظاهری
برای مقادیری که در زمان build مشخصاند (مثل رنگها، عنوان سایت یا حالت تم)، از app.config.ts استفاده کنید:
export default defineAppConfig({
title: 'My Nuxt App',
theme: {
dark: true,
colors: {
primary: '#ff0000',
},
},
})
در کد Vue:
const appConfig = useAppConfig()
app.config.tsاز Hot Module Replacement پشتیبانی میکند، یعنی اگر در زمان توسعه تغییرش دهید، بدون رفرش صفحه بهروزرسانی میشود.
برای طراحی تم یا تنظیمات UI عالی است.
تفاوت بین runtimeConfig و app.config
| ویژگی | runtimeConfig | app.config |
|---|---|---|
| تغییر با .env | ✅ بله | ❌ خیر |
| در سمت کاربر | Hydrated (در زمان اجرا) | Bundled (درون کد build) |
| دادههای حساس | ✅ بله | ❌ خیر |
| تنظیمات UI | ❌ خیر | ✅ بله |
| پشتیبانی HMR | ❌ خیر | ✅ بله |
نکته:
اگر مقدار باید بعد از build قابل تغییر باشد → runtimeConfig
اگر مقدار مربوط به ظاهر یا تم است → app.config
حذف فایلهای پیکربندی جداگانه
در Nuxt 4 نیازی به فایلهای جدا مثل vite.config.ts، postcss.config.js یا nitro.config.ts نیست.
همه چیز باید درون nuxt.config.ts نوشته شود.
مثلاً برای تنظیمات Vite:
export default defineNuxtConfig({
vite: {
vue: {
customElement: true,
},
vueJsx: {
mergeProps: true,
},
},
})
۸. تنظیمات Vue و ویژگیهای آزمایشی
برای فعالسازی ویژگیهای آزمایشی در Vue مثل propsDestructure:
export default defineNuxtConfig({
vue: {
propsDestructure: true,
},
})
از نسخه Nuxt 3.9 به بعد، ویژگی
reactivityTransformاز هستهی Vue حذف شده و در کتابخانهی Vue Macros قرار گرفته است.نکات کاربردی
- برای هر محیط (
local,staging,production) فایل.envجدا بساز — Nuxt خودش آن را تشخیص میدهد.- اطلاعات حساس را هرگز در
runtimeConfig.publicنگذار.- از
app.config.tsبرای تنظیمات تم یا ظاهر استفاده کن تا بتوانی با HMR سریع تست کنی.- با ترکیب
runtimeConfigوuseFetchمیتوانی endpointها را پویا بسازی:
const { public: { apiBase } } = useRuntimeConfig()
const { data } = await useFetch(`${apiBase}/posts`)
- پیکربندی ابزارها مثل Vite و Webpack را فقط در
nuxt.config.tsانجام بده. - برای تست خودکار یا CI/CD از
$env.testاستفاده کن.