您正在浏览 Nuxt 2 文档。前往 Nuxt 3 文档, 或了解更多关于 Nuxt 2 长期支持

启用自动发现

v2.13 起,Nuxt 可以自动导入模板中使用的组件。要启用此功能,请在配置文件中设置 components: true

nuxt.config.js
export default {
  components: true
}

使用组件

一旦在 components 目录中创建了组件,无需导入即可在整个应用中使用。

| components/
--| TheHeader.vue
--| TheFooter.vue
layouts/default.vue
<template>
  <div>
    <TheHeader />
    <Nuxt />
    <TheFooter />
  </div>
</template>

组件名称

如果组件位于如下嵌套目录中:

| components/
--| base/
----| foo/
------| Button.vue

组件名称将基于其自身的路径目录和文件名。因此,该组件为:

<BaseFooButton />
为了清晰起见,建议组件文件名与其名称保持一致。(即在上面的示例中,可以将 Button.vue 重命名为 BaseFooButton.vue。)

如果想使用不包含在组件名称中的自定义目录结构,可以显式指定这些目录:

| components/
--| base/
----| foo/
------| Button.vue
nuxt.config.js
components: {
  dirs: [
    '~/components',
    '~/components/base'
  ]
}

这样在模板中可以使用 FooButton 代替 BaseFooButton

pages/index.vue
<FooButton />
关于组件和目录的命名,请参考 Vue.js 风格指南

动态导入

要动态导入组件(也称为组件懒加载),只需在组件名称前添加 Lazy 前缀即可。

layouts/default.vue
<template>
  <div>
    <TheHeader />
    <Nuxt />
    <LazyTheFooter />
  </div>
</template>

当组件并非总是需要时,这特别有用。使用 Lazy 前缀可以将组件代码的加载延迟到适当时机,有助于优化 JavaScript 打包体积。

pages/index.vue
<template>
  <div>
    <h1>Mountains</h1>
    <LazyMountainsList v-if="show" />
    <button v-if="!show" @click="show = true">Show List</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      show: false
    }
  }
}
</script>

速查表

Edit this page on GitHub Updated at Tue, Apr 14, 2026