Компоненты

Исходный код
Nuxt Kit предоставляет утилиты для работы с компонентами — глобальной и локальной регистрации и подключения каталогов для сканирования.

Компоненты — основные строительные блоки интерфейса в Nuxt: переиспользуемые экземпляры Vue. Файлы из каталога components подключаются автоматически; для других путей или точечной регистрации используйте addComponentsDir и addComponent из @nuxt/kit.

Посмотрите видео от Vue School о внедрении компонентов.

addComponentsDir

Регистрирует каталог для сканирования компонентов с подгрузкой по использованию (tree-shaking). Глобальная регистрация не включается, пока не задано 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 (~, @) и путь к npm-пакету (как в require).
patternstring | string[]falseGlob-шаблон отбора файлов внутри path.
ignorestring[]falseGlob-шаблоны файлов, которые не учитывать.
prefixstringfalseПрефикс имён зарегистрированных компонентов.
pathPrefixbooleanfalseДобавлять к имени компонента префикс из относительного пути файла.
enabledbooleanfalseПри false этот каталог не сканируется.
prefetchbooleanfalseСвойства prefetch/preload в продакшене настраивают обработку компонентов с префиксом Lazy в webpack через «магические» комментарии. Подробнее — в документации webpack.
preloadbooleanfalseСвойства prefetch/preload в продакшене настраивают обработку компонентов с префиксом Lazy в webpack через «магические» комментарии. Подробнее — в документации webpack.
isAsyncbooleanfalseФлаг: компонент загружать асинхронно (отдельным чанком), независимо от использования префикса Lazy.
extendComponent(component: Component) => Promise<Component | void> | (Component | void)falseВызывается для каждого найденного компонента; принимает его описание и возвращает изменённый объект или Promise с ним.
globalbooleanfalseПри включении регистрирует компоненты глобально.
islandbooleanfalseПри включении регистрирует компоненты как острова (islands). Подробнее — в описании <NuxtIsland/>.
watchbooleanfalseОтслеживать изменения указанного пути, включая добавление и удаление файлов.
extensionsstring[]falseРасширения файлов, поддерживаемые сборщиком Nuxt.
transpile'auto' | booleanfalseПрокидывать путь в build.transpile. Значение 'auto' включает транспиляцию (true), если в пути встречается node_modules/.

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Путь к файлу компонента.
pascalNamestringfalseИмя в PascalCase; по умолчанию выводится из name.
kebabNamestringfalseИмя в kebab-case; по умолчанию выводится из name.
exportstringfalseИменованный или default-экспорт. Если не задано, используется 'default'.
shortPathstringfalseКраткий путь к компоненту. Если не задан, выводится из пути к файлу.
chunkNamestringfalseИмя чанка для компонента. Если не задано, выводится из имени компонента.
prefetchbooleanfalseСвойства prefetch/preload в продакшене настраивают обработку компонентов с префиксом Lazy в webpack через «магические» комментарии. Подробнее — в документации webpack.
preloadbooleanfalseСвойства prefetch/preload в продакшене настраивают обработку компонентов с префиксом Lazy в webpack через «магические» комментарии. Подробнее — в документации webpack.
globalbooleanfalseПри включении регистрирует компонент глобально.
islandbooleanfalseПри включении регистрирует компонент как остров (island). Подробнее — в описании <NuxtIsland/>.
mode'client' | 'server' | 'all'falseГде рендерить: только клиент, только сервер или везде. По умолчанию — клиент и сервер.
prioritynumberfalseПриоритет компонента; при совпадении имён используется компонент с наибольшим приоритетом.

Примеры

Чтобы автоимпортировать компонент из npm-пакета как именованный экспорт (не default), укажите опцию 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',
    })
  },
})