配置
默认情况下,Nuxt 配置了合理的默认值,以提高您的开发效率。nuxt.config.ts 文件可以覆盖或扩展这些默认配置。
Nuxt 配置
nuxt.config.ts 文件位于 Nuxt 项目的根目录,可以覆盖或扩展应用程序的行为。
一个最简化的配置文件导出了包含配置对象 defineNuxtConfig 函数。defineNuxtConfig 助手函数是全局可用的,无需导入。
export default defineNuxtConfig({
// My Nuxt config
})
该文件在文档中经常被提及,例如用于添加自定义脚本、注册模块或更改渲染模式。
nuxt.config 文件使用 .ts 扩展名。这样,您可以在 IDE 中获得提示,以避免在编辑配置时出现拼写错误和失误。环境覆盖
您可以在 nuxt.config 中配置完全类型化的、按环境区分的覆盖。
export default defineNuxtConfig({
$production: {
routeRules: {
'/**': { isr: true }
}
},
$development: {
//
},
$env: {
staging: {
//
}
},
})
要在运行 Nuxt CLI 命令时选择环境,只需将名称传递给 --envName 标志,如下所示:nuxi build --envName staging。
要了解有关这些覆盖机制的更多信息,请参阅 c12 文档中的 特定于环境的配置。
$meta 键来提供您或您的 Layer 的使用者可能会使用的元数据。环境变量和私有令牌
runtimeConfig API 将环境变量等值暴露给应用程序的其余部分。默认情况下,这些键仅在服务器端可用。runtimeConfig.public 和 runtimeConfig.app(Nuxt 内部使用)中的键也可 在客户端使用。
这些值应在 nuxt.config 中定义,并且可以使用环境变量覆盖。
export default defineNuxtConfig({
runtimeConfig: {
// The private keys which are only available server-side
apiSecret: '123',
// Keys within public are also exposed client-side
public: {
apiBase: '/api'
}
}
})
# This will override the value of apiSecret
NUXT_API_SECRET=api_secret_token
这些变量使用 useRuntimeConfig() composable 暴露给应用程序的其余部分。
<script setup lang="ts">
const runtimeConfig = useRuntimeConfig()
</script>
应用配置
位于源目录(默认情况下是项目根目录)中的 app.config.ts 文件用于暴露可以在构建时确定的公共变量。与 runtimeConfig 选项相反,这些变量不能使用环境变量覆盖。
一个最简化的配置文件导出了包含配置对象 defineAppConfig 函数。defineAppConfig 助手函数是全局可用的,无需导入。
export default defineAppConfig({
title: 'Hello Nuxt',
theme: {
dark: true,
colors: {
primary: '#ff0000'
}
}
})
这些变量使用 useAppConfig composable 暴露给应用程序的其余部分。
<script setup lang="ts">
// 通过 useAppConfig() 获取的对象会自动响应变更,触发依赖组件的重新渲染。
const appConfig = useAppConfig()
</script>
updateAppConfig 和直接修改 useAppConfig() 返回的 appConfig 对象中的属性,都能实现修改全局配置的效果,但它们在用法意图、推荐程度以及内部处理方式上存在一些重要区别。主要区别总结:| 特性 | 直接修改 appConfig 属性 | updateAppConfig(config) |
|---|---|---|
| 操作 | 直接对响应式对象进行属性赋值 | 调用一个函数,传入一个用于合并的对象 |
| 意圖 | 模糊(既可读又可写) | 明确表示“更新全局配置” |
| 修改方式 | 需要手动确保对象深度合并或完整覆盖 | 自动深度合并你提供的对象 |
| 推荐程度 | 不推荐,除非有非常特殊且明确的原因 | 官方推荐的运行时修改全局配置的方式 |
| 内部处理 | Vue 响应式系统直接处理 | Nuxt 内部的配置更新逻辑处理,然后触发响应式更新 |
| 适用场景 | 简单读取;小规模、清晰的直接修改 | 动态主题切换、用户偏好设置、A/B 测试等需要动态且优雅地更新全局配置的场景 |
runtimeConfig vs. app.config
如上所述,runtimeConfig 和 app.config 都用于将变量暴露给应用程序的其余部分。要确定应该使用哪个,请参考以下准则:
runtimeConfig: 需要在构建后使用环境变量指定的私有或公共令牌。- 敏感数据管理:用于存储需要在运行时通过环境变量动态调整的敏感信息(如 API 密钥、数据库密码)。
- 环境变量支持:通过
.env文件或生产环境变量注入,支持前缀NUXT_覆盖配置值(例如NUXT_PUBLIC_API_BASE)。 - 访问范围:分为
private(仅服务端访问)和public(客户端和服务端均可访问),默认私密性更高
app.config: 在构建时确定的公共令牌,网站配置(如主题变体、标题)以及任何不敏感的项目配置。- 非敏感公共配置:适用于构建时确定的公共数据(如主题颜色、标题、静态 CDN 路径),无需环境变量覆盖。
- 动态性:支持通过
updateAppConfig在运行时动态更新配置,且变更会触发热模块替换(HMR),无需重启应用。
| Feature | runtimeConfig | app.config |
|---|---|---|
| 客户端 | Hydrated | Bundled |
| 环境变量 | ✅ Yes | ❌ No |
| 响应式 | ✅ Yes | ✅ Yes |
| 类型支持 | ✅ Partial | ✅ Yes |
| 按请求配置 | ❌ No | ✅ Yes |
| 热模块替换 | ❌ No | ✅ Yes |
| 非原始 JS 类型 | ❌ No | ✅ Yes |
外部配置文件
Nuxt 使用 nuxt.config.ts 文件作为配置的唯一来源(Nuxt 在构建时会忽略外部配置文件,开发者需将原外部配置迁移至 nuxt.config.ts 中),并跳过读取外部配置文件。在构建项目的过程中,您可能需要配置这些文件。下表重点介绍了常见的配置,并在适用的情况下说明了如何在 Nuxt 中配置它们。
| 名称 | 配置文件 | 如何配置 |
|---|---|---|
| Nitro | nitro.config.ts | 在 nuxt.config 中使用 nitro 键 |
| PostCSS | postcss.config.js | 在 nuxt.config 中使用 postcss 键 |
| Vite | vite.config.ts | 在 nuxt.config 中使用 vite 键 |
| webpack | webpack.config.ts | 在 nuxt.config 中使用 webpack 键 |
以下是其他常见配置文件的列表:
| 名称 | 配置文件 | 如何配置 |
|---|---|---|
| TypeScript | tsconfig.json | 更多信息 |
| ESLint | eslint.config.js | 更多信息 |
| Prettier | prettier.config.js | 更多信息 |
| Stylelint | stylelint.config.js | 更多信息 |
| TailwindCSS | tailwind.config.js | 更多信息 |
| Vitest | vitest.config.ts | 更多信息 |
Vue 配置
使用 Vite
如果您需要将选项传递给 @vitejs/plugin-vue 或 @vitejs/plugin-vue-jsx,可以在 nuxt.config 文件中进行配置。
export default defineNuxtConfig({
vite: {
vue: {
customElement: true
},
vueJsx: {
mergeProps: true
}
}
})
使用 webpack
如果您使用 webpack 并且需要配置 vue-loader,您可以使用 nuxt.config 文件中的 webpack.loaders.vue 键进行配置。可用选项在 此处定义。
export default defineNuxtConfig({
webpack: {
loaders: {
vue: {
hotReload: true,
}
}
}
})
启用实验性 Vue 特性
您可能需要在 Vue 中启用实验性特性,例如 propsDestructure。无论您使用哪个构建器,Nuxt 都提供了一种在 nuxt.config.ts 中轻松实现此目的的方法:
export default defineNuxtConfig({
vue: {
propsDestructure: true
}
})
从 Vue 3.4 和 Nuxt 3.9 迁移实验性的 reactivityTransform
自 Nuxt 3.9 和 Vue 3.4 起,reactivityTransform 已从 Vue 移至 Vue Macros,后者具有 Nuxt 集成 扩展模块。
| 维度 | Vue Macros | VueUse |
|---|---|---|
| 核心目标 | 扩展 Vue 的语法和功能,探索实验性提案 | 提供现成的 Composition API 工具函数集合 |
| 技术定位 | 编译时宏(Compiler Macros) | 运行时工具函数(Runtime Utilities) |
| 兼容性 | 支持 Vue 2.7+/3+,需构建工具集成 | 支持 Vue 2.7+/3+,无构建工具依赖 |
| 维护方向 | 由 Vue 核心团队主导,吸收社区提案 | 社区驱动,覆盖高频开发场景 |