Lzh on GitHub

配置

Nuxt 已经配置了合理的默认设置,以提高您的生产力。

默认情况下,Nuxt 配置了合理的默认值,以提高您的开发效率。nuxt.config.ts 文件可以覆盖或扩展这些默认配置。

Nuxt 配置

nuxt.config.ts 文件位于 Nuxt 项目的根目录,可以覆盖或扩展应用程序的行为。

一个最简化的配置文件导出了包含配置对象 defineNuxtConfig 函数。defineNuxtConfig 助手函数是全局可用的,无需导入。

nuxt.config.ts
export default defineNuxtConfig({
  // My Nuxt config
})

该文件在文档中经常被提及,例如用于添加自定义脚本、注册模块或更改渲染模式。

每个选项都在 配置参考 中进行了描述。
您不必使用 TypeScript 来构建 Nuxt 应用程序。但是,强烈建议对 nuxt.config 文件使用 .ts 扩展名。这样,您可以在 IDE 中获得提示,以避免在编辑配置时出现拼写错误和失误。

环境覆盖

您可以在 nuxt.config 中配置完全类型化的、按环境区分的覆盖。

nuxt.config.ts
export default defineNuxtConfig({
  $production: {
    routeRules: {
      '/**': { isr: true }
    }
  },
  $development: {
    //
  },
  $env: {
    staging: {
      // 
    }
  },
})

要在运行 Nuxt CLI 命令时选择环境,只需将名称传递给 --envName 标志,如下所示:nuxi build --envName staging

要了解有关这些覆盖机制的更多信息,请参阅 c12 文档中的 特定于环境的配置

如果您正在编写 Layer,您还可以使用 $meta 键来提供您或您的 Layer 的使用者可能会使用的元数据。

环境变量和私有令牌

runtimeConfig API 将环境变量等值暴露给应用程序的其余部分。默认情况下,这些键仅在服务器端可用runtimeConfig.publicruntimeConfig.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'
    }
  }
})

这些变量使用 useRuntimeConfig() composable 暴露给应用程序的其余部分。

pages/index.vue
<script setup lang="ts">
const runtimeConfig = useRuntimeConfig()
</script>
Read more in Docs > Guide > Going Further > Runtime Config.

应用配置

位于源目录(默认情况下是项目根目录)中的 app.config.ts 文件用于暴露可以在构建时确定的公共变量。与 runtimeConfig 选项相反,这些变量不能使用环境变量覆盖。

一个最简化的配置文件导出了包含配置对象 defineAppConfig 函数。defineAppConfig 助手函数是全局可用的,无需导入。

app.config.ts
export default defineAppConfig({
  title: 'Hello Nuxt',
  theme: {
    dark: true,
    colors: {
      primary: '#ff0000'
    }
  }
})

这些变量使用 useAppConfig composable 暴露给应用程序的其余部分。

pages/index.vue
<script setup lang="ts">
  // 通过 useAppConfig() 获取的对象会自动响应变更,触发依赖组件的重新渲染。
  const appConfig = useAppConfig()
</script>
Read more in Docs > Guide > Directory Structure > App Config.
在 Nuxt 3 中,updateAppConfig 和直接修改 useAppConfig() 返回的 appConfig 对象中的属性,都能实现修改全局配置的效果,但它们在用法意图、推荐程度以及内部处理方式上存在一些重要区别。主要区别总结:
特性直接修改 appConfig 属性updateAppConfig(config)
操作直接对响应式对象进行属性赋值调用一个函数,传入一个用于合并的对象
意圖模糊(既可读又可写)明确表示“更新全局配置”
修改方式需要手动确保对象深度合并或完整覆盖自动深度合并你提供的对象
推荐程度不推荐,除非有非常特殊且明确的原因官方推荐的运行时修改全局配置的方式
内部处理Vue 响应式系统直接处理Nuxt 内部的配置更新逻辑处理,然后触发响应式更新
适用场景简单读取;小规模、清晰的直接修改动态主题切换、用户偏好设置、A/B 测试等需要动态且优雅地更新全局配置的场景

runtimeConfig vs. app.config

如上所述,runtimeConfigapp.config 都用于将变量暴露给应用程序的其余部分。要确定应该使用哪个,请参考以下准则:

  • runtimeConfig: 需要在构建后使用环境变量指定的私有或公共令牌。
    • 敏感数据管理:用于存储需要在运行时通过环境变量动态调整的敏感信息(如 API 密钥、数据库密码)。
    • 环境变量支持:通过 .env 文件或生产环境变量注入,支持前缀 NUXT_ 覆盖配置值(例如 NUXT_PUBLIC_API_BASE)。
    • 访问范围:分为 private(仅服务端访问)和 public(客户端和服务端均可访问),默认私密性更高
  • app.config: 在构建时确定的公共令牌,网站配置(如主题变体、标题)以及任何不敏感的项目配置。
    • 非敏感公共配置:适用于构建时确定的公共数据(如主题颜色、标题、静态 CDN 路径),无需环境变量覆盖。
    • 动态性:支持通过 updateAppConfig 在运行时动态更新配置,且变更会触发热模块替换(HMR),无需重启应用。
FeatureruntimeConfigapp.config
客户端HydratedBundled
环境变量✅ Yes❌ No
响应式✅ Yes✅ Yes
类型支持✅ Partial✅ Yes
按请求配置❌ No✅ Yes
热模块替换❌ No✅ Yes
非原始 JS 类型❌ No✅ Yes

外部配置文件

Nuxt 使用 nuxt.config.ts 文件作为配置的唯一来源(Nuxt 在构建时会忽略外部配置文件,开发者需将原外部配置迁移至 nuxt.config.ts 中),并跳过读取外部配置文件。在构建项目的过程中,您可能需要配置这些文件。下表重点介绍了常见的配置,并在适用的情况下说明了如何在 Nuxt 中配置它们。

名称配置文件如何配置
Nitronitro.config.tsnuxt.config 中使用 nitro
PostCSSpostcss.config.jsnuxt.config 中使用 postcss
Vitevite.config.tsnuxt.config 中使用 vite
webpackwebpack.config.tsnuxt.config 中使用 webpack

以下是其他常见配置文件的列表:

名称配置文件如何配置
TypeScripttsconfig.json更多信息
ESLinteslint.config.js更多信息
Prettierprettier.config.js更多信息
Stylelintstylelint.config.js更多信息
TailwindCSStailwind.config.js更多信息
Vitestvitest.config.ts更多信息

Vue 配置

使用 Vite

如果您需要将选项传递给 @vitejs/plugin-vue@vitejs/plugin-vue-jsx,可以在 nuxt.config 文件中进行配置。

  • vite.vue 用于 @vitejs/plugin-vue。在此处查看可用选项:链接
  • vite.vueJsx 用于 @vitejs/plugin-vue-jsx。在此处查看可用选项:链接
nuxt.config.ts
export default defineNuxtConfig({
  vite: {
    vue: {
      customElement: true
    },
    vueJsx: {
      mergeProps: true
    }
  }
})
Read more in Docs > API > Configuration > Nuxt Config#vue.

使用 webpack

如果您使用 webpack 并且需要配置 vue-loader,您可以使用 nuxt.config 文件中的 webpack.loaders.vue 键进行配置。可用选项在 此处定义

nuxt.config.ts
export default defineNuxtConfig({
  webpack: {
    loaders: {
      vue: {
        hotReload: true,
      }
    }
  }
})
Read more in Docs > API > Configuration > Nuxt Config#loaders.

启用实验性 Vue 特性

您可能需要在 Vue 中启用实验性特性,例如 propsDestructure。无论您使用哪个构建器,Nuxt 都提供了一种在 nuxt.config.ts 中轻松实现此目的的方法:

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 集成 扩展模块。

Read more in Docs > API > Configuration > Nuxt Config#vue 1.
Vue MacrosVueUse 都是 Vue 生态中的重要工具库,但二者的设计目标、核心功能及适用场景存在显著差异。以下是两者的详细对比分析:
维度Vue MacrosVueUse
核心目标扩展 Vue 的语法和功能,探索实验性提案提供现成的 Composition API 工具函数集合
技术定位编译时宏(Compiler Macros)运行时工具函数(Runtime Utilities)
兼容性支持 Vue 2.7+/3+,需构建工具集成支持 Vue 2.7+/3+,无构建工具依赖
维护方向由 Vue 核心团队主导,吸收社区提案社区驱动,覆盖高频开发场景