配置

Nuxt 默认配置合理,让你高效工作。

Nuxt 默认配置已覆盖大多数使用场景。你可以通过 nuxt.config.ts 文件覆盖或扩展这些默认配置。

Nuxt 配置

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

一个最小的配置文件需要导出一个 defineNuxtConfig 函数,该函数包含一个配置对象。defineNuxtConfig 辅助函数无需导入即可全局使用。

nuxt.config.ts
export default defineNuxtConfig({
  // 我的 Nuxt 配置
})

文档中会经常提到这个文件,例如用于添加自定义脚本、注册模块或更改渲染模式。

每个选项都在 配置参考 中有详细描述。
你无需使用 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 文档中的环境特定配置

如果你在编写层(layers),还可以使用 $meta 键提供元数据,供你或你的层的使用者使用。

环境变量和私有令牌

runtimeConfig API 将类似环境变量的值暴露给应用的其余部分。默认情况下,这些键仅在服务器端可用。runtimeConfig.publicruntimeConfig.app(Nuxt 内部使用)中的键也可以在客户端使用。

这些值应在 nuxt.config 中定义,并可通过环境变量覆盖。

export default defineNuxtConfig({
  runtimeConfig: {
    // 仅在服务器端可用的私有键
    apiSecret: '123',
    // public 中的键也会暴露到客户端
    public: {
      apiBase: '/api'
    }
  }
})

这些变量通过 useRuntimeConfig() 组合式函数暴露给应用的其余部分。

pages/index.vue
<script setup lang="ts">
const runtimeConfig = useRuntimeConfig()
</script>
阅读更多 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 组合式函数暴露给应用的其余部分。

pages/index.vue
<script setup lang="ts">
const appConfig = useAppConfig()
</script>
阅读更多 Docs > Guide > Directory Structure > App Config.

runtimeConfig vs. app.config

如上所述,runtimeConfigapp.config 都用于向应用的其余部分暴露变量。以下是一些选择使用哪一个的指导原则:

  • runtimeConfig:需要在构建后通过环境变量指定的私有或公共令牌。
  • app.config:在构建时确定的公共令牌,例如网站主题变体、标题以及任何非敏感的项目配置。
功能runtimeConfigapp.config
客户端动态加载打包
环境变量✅ 支持❌ 不支持
响应式✅ 支持✅ 支持
类型支持✅ 部分支持✅ 支持
按请求配置❌ 不支持✅ 支持
热模块替换❌ 不支持✅ 支持
非原始 JS 类型❌ 不支持✅ 支持

外部配置文件

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.jsonMore Info
ESLinteslint.config.jsMore Info
Prettierprettier.config.jsMore Info
Stylelintstylelint.config.jsMore Info
TailwindCSStailwind.config.jsMore Info
Vitestvitest.config.tsMore Info

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
    }
  }
})
阅读更多 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,
      }
    }
  }
})
阅读更多 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 集成

阅读更多 Docs > API > Configuration > Nuxt Config#vue 1.