Resolving

Исходники
Nuxt Kit предоставляет набор утилит, которые помогут вам разрешать пути. Эти функции позволяют вам разрешать пути, относительные к текущему модулю, с неизвестным именем или расширением.

Иногда вам необходимо разрешать пути: относительные к текущему модулю, с неизвестным именем или расширением. Например, вы можете захотеть добавить плагин, который находится в той же директории, что и модуль. Для обработки таких случаев Nuxt предоставляет набор утилит для разрешения путей. resolvePath и resolveAlias используются для разрешения путей, относительных к текущему модулю. findPath используется для поиска первого существующего файла в заданных путях. createResolver используется для создания резолвера, относительного к базовому пути.

resolvePath

Разрешает полный путь к файлу или директории, учитывая псевдонимы и опции расширений Nuxt. Если путь не может быть разрешен, будет возвращен нормализованный входной путь.

Использование

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

export default defineNuxtModule({
  async setup () {
    const entrypoint = await resolvePath('@unhead/vue')
    console.log(`Unhead entrypoint is ${entrypoint}`)
  },
})

Тип

function resolvePath (path: string, options?: ResolvePathOptions): Promise<string>

Параметры

path: путь для разрешения.

options: опции резолвера:

СвойствоТипОбязательныйОписание
cwdstringнетБаза для разрешения путей. По умолчанию — rootDir Nuxt.
aliasRecord<string, string>нетОбъект алиасов. По умолчанию — алиасы Nuxt.
extensionsstring[]нетРасширения файлов для перебора. По умолчанию — из конфига Nuxt.
virtualbooleanнетРазрешать файлы из виртуальной ФС Nuxt (например шаблоны).
fallbackToOriginalbooleanнетПри отсутствии файла возвращать исходный путь вместо нормализованного.

Примеры

import { defineNuxtModule, resolvePath } from '@nuxt/kit'
import { join } from 'pathe'

const headlessComponents: ComponentGroup[] = [
  {
    relativePath: 'combobox/combobox.js',
    chunkName: 'headlessui/combobox',
    exports: [
      'Combobox',
      'ComboboxLabel',
      'ComboboxButton',
      'ComboboxInput',
      'ComboboxOptions',
      'ComboboxOption',
    ],
  },
]

export default defineNuxtModule({
  meta: {
    name: 'nuxt-headlessui',
    configKey: 'headlessui',
  },
  defaults: {
    prefix: 'Headless',
  },
  async setup (options) {
    const entrypoint = await resolvePath('@headlessui/vue')
    const root = join(entrypoint, '../components')

    for (const group of headlessComponents) {
      for (const e of group.exports) {
        addComponent(
          {
            name: e,
            export: e,
            filePath: join(root, group.relativePath),
            chunkName: group.chunkName,
            mode: 'all',
          },
        )
      }
    }
  },
})

resolveAlias

Разрешает псевдонимы путей в соответствии с опциями псевдонимов Nuxt.

Тип

function resolveAlias (path: string, alias?: Record<string, string>): string

Параметры

path: путь для разрешения.

alias: объект алиасов. Если не передан — берётся из nuxt.options.alias.

findPath

Попытайтесь разрешить первый существующий файл в заданных путях.

Использование

import { defineNuxtModule, findPath } from '@nuxt/kit'
import { join } from 'pathe'

export default defineNuxtModule({
  async setup (_, nuxt) {
    // Разрешить main (app.vue)
    const mainComponent = await findPath([
      join(nuxt.options.srcDir, 'App'),
      join(nuxt.options.srcDir, 'app'),
    ])
  },
})

Тип

function findPath (paths: string | string[], options?: ResolvePathOptions, pathType: 'file' | 'dir'): Promise<string | null>

Параметры

paths: путь или массив путей для разрешения.

options: опции резолвера. Объект может содержать следующие свойства:

СвойствоТипОбязательныйОписание
cwdstringнетБаза для разрешения путей. По умолчанию — rootDir Nuxt.
aliasRecord<string, string>нетОбъект алиасов. По умолчанию — алиасы из конфигурации Nuxt.
extensionsstring[]нетРасширения файлов для подстановки. По умолчанию — из конфигурации Nuxt.
virtualbooleanнетРазрешать ли файлы из виртуальной ФС Nuxt (например, шаблоны Nuxt).
fallbackToOriginalbooleanнетПри отсутствии разрешённого пути возвращать исходный путь вместо нормализованного.

createResolver

Создает резолвер относительно базового пути.

Посмотрите видео от Vue School о createResolver.

Использование

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

export default defineNuxtModule({
  setup (_, nuxt) {
    const { resolve, resolvePath } = createResolver(import.meta.url)
  },
})

Тип

function createResolver (basePath: string | URL): Resolver

Параметры

basePath: базовый путь (строка или URL) для разрешения относительных путей.

Возвращаемое значение

Объект с методами:

СвойствоТипОписание
resolve(path: string) => stringРазрешает путь относительно базового.
resolvePath(path: string, options?: ResolvePathOptions) => Promise<string>Разрешает путь с учётом алиасов и расширений Nuxt.

Примеры

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

export default defineNuxtModule({
  setup (options, nuxt) {
    const resolver = createResolver(import.meta.url)

    nuxt.hook('modules:done', () => {
      if (isNuxt2()) {
        addPlugin(resolver.resolve('./runtime/plugin.vue2'))
      } else {
        addPlugin(resolver.resolve('./runtime/plugin.vue3'))
      }
    })
  },
})