组件

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

组件是 Nuxt 应用程序的基石。它们是可重用的 Vue 实例,可用于创建用户界面。在 Nuxt 中,默认情况下会自动导入 `components` 目录中的组件。但是,如果你需要从替代目录导入组件或希望根据需要选择性导入它们,@nuxt/kit 提供了 addComponentsDiraddComponent 方法。这些实用工具允许你自定义组件配置,以更好地满足你的需求。

观看 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)用于生产环境,以配置带有 Lazy 前缀的组件如何由 webpack 通过其魔法注释处理。了解更多信息,请参阅webpack 文档
preloadbooleanfalse这些属性(prefetch/preload)用于生产环境,以配置带有 Lazy 前缀的组件如何由 webpack 通过其魔法注释处理。了解更多信息,请参阅webpack 文档
isAsyncbooleanfalse此标志指示组件应异步加载(带有一个单独的 chunk),无论是否使用 Lazy 前缀。
extendComponent(component: Component) => Promise<Component | void> | (Component | void)false一个函数,将为目录中找到的每个组件调用。它接受一个组件对象,并应返回一个组件对象或解析为组件对象的 Promise。
globalbooleanfalse如果启用,则注册组件以全局可用。
islandbooleanfalse如果启用,则将组件注册为 islands。你可以在 <NuxtIsland/> 组件描述中了解更多关于 islands 的信息。
watchbooleanfalse监视指定路径的更改,包括文件添加和文件删除。
extensionsstring[]falseNuxt builder 支持的扩展。
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组件的 chunk 名称。如果未提供,将从组件名称生成。
prefetchbooleanfalse这些属性(prefetch/preload)用于生产环境,以配置带有 Lazy 前缀的组件如何由 webpack 通过其魔法注释处理。了解更多信息,请参阅webpack 文档
preloadbooleanfalse这些属性(prefetch/preload)用于生产环境,以配置带有 Lazy 前缀的组件如何由 webpack 通过其魔法注释处理。了解更多信息,请参阅webpack 文档
globalbooleanfalse如果启用,则注册组件以全局可用。
islandbooleanfalse如果启用,则将组件注册为 island。你可以在 <NuxtIsland/> 组件描述中了解更多关于 islands 的信息。
模式'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',
    })
  },
})