Nuxt 3 已于 31 July 2026 结束生命周期
此版本将不再接收错误修复或安全补丁。 升级到 Nuxt 4 或获取 HeroDevs 提供的延长支持

组件

Nuxt Kit 提供了一组工具,帮助你处理组件。你可以全局或局部注册组件,还可以添加目录以扫描组件。

Geprüfte Übersetzung ·0 % geprüft

组件是你的 Nuxt 应用的构建模块。它们是可复用的 Vue 实例,用于创建用户界面。在 Nuxt 中,components 目录下的组件默认会被自动导入。但是如果你需要从其他目录导入组件,或者希望按需选择性导入,@nuxt/kit 提供了 addComponentsDir 和 addComponent 方法。这些工具允许你自定义组件配置,更好地满足你的需求。

观看 Vue School 关于注入组件的视频。

addComponentsDir

注册一个目录,用于扫描组件,并且仅在使用时导入。请注意,这不会全局注册组件,除非你指定了 global: true 选项。

用法

export default defineNuxtModule({
  meta: {
    name: '@nuxt/ui',
    configKey: 'ui',
  },
  setup () {
    addComponentsDir({
      path: resolve('./runtime/components'),
      prefix: 'U',
      pathPrefix: false,
    })
  },
})

类型

function addComponentsDir (dir: ComponentsDir, opts: { prepend?: boolean } = {}): void

参数

dir 一个包含以下属性的对象:

属性类型必需描述
pathstringtrue包含组件的目录路径(绝对路径或相对路径)。你可以使用 Nuxt 别名(~ 或 @)引用项目中的目录,也可以直接使用类似于 require 的 npm 包路径。
patternstring | string[]false将针对指定路径运行的匹配模式。
ignorestring[]false将针对指定路径运行的忽略模式。
prefixstringfalse为所有匹配的组件添加此字符串作为前缀。
pathPrefixbooleanfalse根据组件所在的路径为组件名称添加前缀。
prefetchbooleanfalse这些属性(prefetch/preload)用于在生产环境中通过 webpack 的魔法注释配置如何处理带有 Lazy 前缀的组件。详见 webpack 文档
preloadbooleanfalse这些属性(prefetch/preload)用于在生产环境中通过 webpack 的魔法注释配置如何处理带有 Lazy 前缀的组件。详见 webpack 文档
isAsyncbooleanfalse此标志表示组件应以异步方式加载(使用单独的代码块),无论是否使用 Lazy 前缀。
extendComponent(component: Component) => Promise<Component | void> | (Component | void)false对目录中找到的每个组件调用的函数。它接收一个组件对象,并应返回一个组件对象或一个解析为组件对象的 promise。
globalbooleanfalse如果启用,组件将被全局注册。
islandbooleanfalse如果启用,组件将被注册为岛屿组件。你可以在 <NuxtIsland/> 组件说明中了解有关岛屿组件的更多信息。
watchbooleanfalse监视指定路径中的更改,包括添加和删除文件。
extensionsstring[]falseNuxt 构建器支持的扩展名。
transpile'auto' | booleanfalse使用 build.transpile 转译指定路径。如果设置为 'auto',且路径中包含 node_modules/,则会设置 transpile: true。

opts

属性类型必需描述
prependbooleanfalse如果设置为 true,目录将通过 unshift() 添加到数组前端,否则使用 push() 添加到末尾。

addComponent

注册一个组件,使其可以被自动导入。

用法

import { addComponent, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: '@nuxt/image',
    configKey: 'image',
  },
  setup () {
    const resolver = createResolver(import.meta.url)

    addComponent({
      name: 'NuxtImg',
      filePath: resolver.resolve('./runtime/components/NuxtImg.vue'),
    })

    addComponent({
      name: 'NuxtPicture',
      filePath: resolver.resolve('./runtime/components/NuxtPicture.vue'),
    })
  },
})

类型

function addComponent (options: AddComponentOptions): void

参数

options:一个包含以下属性的对象:

属性类型必需描述
namestringtrue组件名称。
filePathstringtrue组件路径。
declarationPathstringfalse组件声明文件的路径。它用于生成组件的类型模板;如果未提供,则改用 filePath。
pascalNamestringfalsePascal 命名格式的组件名称。如果未提供,则会根据组件名称生成。
kebabNamestringfalsekebab 命名格式的组件名称。如果未提供,则会根据组件名称生成。
exportstringfalse指定具名导出或默认导出。如果未提供,则会设置为 'default'。
shortPathstringfalse组件的短路径。如果未提供,则会根据组件路径生成。
chunkNamestringfalse组件的代码块名称。如果未提供,则会根据组件名称生成。
prefetchbooleanfalse这些属性(prefetch/preload)用于在生产环境中通过 webpack 的魔法注释配置如何处理带有 Lazy 前缀的组件。详见 webpack 文档
preloadbooleanfalse这些属性(prefetch/preload)用于在生产环境中通过 webpack 的魔法注释配置如何处理带有 Lazy 前缀的组件。详见 webpack 文档
globalbooleanfalse如果启用,组件将被全局注册。
islandbooleanfalse如果启用,组件将被注册为岛屿组件。你可以在 <NuxtIsland/> 组件说明中了解有关岛屿组件的更多信息。
mode'client' | 'server' | 'all'false此选项指示组件应在客户端、服务器端还是两者都渲染。默认情况下,组件会在客户端和服务器端都渲染。
prioritynumberfalse组件的优先级。如果多个组件名称相同,则使用优先级最高的组件。

示例

如果你想要自动导入一个来自 npm 包的组件,而该组件是命名导出(非默认导出),可以使用 export 选项来指定它。

import { addComponent, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup () {
    // import { MyComponent as MyAutoImportedComponent } from 'my-npm-package'
    addComponent({
      name: 'MyAutoImportedComponent',
      export: 'MyComponent',
      filePath: 'my-npm-package',
    })
  },
})