Resolving

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

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

resolvePath

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

Usage

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

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

Type

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

Параметры

path: A path to resolve.

options: Options to pass to the resolver. This object can have the following properties:

PropertyTypeRequiredDescription
cwdstringfalseBase for resolving paths from. Default is Nuxt rootDir.
aliasRecord<string, string>falseAn object of aliases. Default is Nuxt configured aliases.
extensionsstring[]falseThe file extensions to try. Default is Nuxt configured extensions.
virtualbooleanfalseWhether to resolve files that exist in the Nuxt VFS (for example, as a Nuxt template).
fallbackToOriginalbooleanfalseWhether to fallback to the original path if the resolved path does not exist instead of returning the normalized input path.

Примеры

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: A path to resolve.

alias: An object of aliases. If not provided, it will be read from nuxt.options.alias.

findPath

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

Usage

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

export default defineNuxtModule({
  async setup (_, nuxt) {
    // Resolve main (app.vue)
    const mainComponent = await findPath([
      join(nuxt.options.srcDir, 'App'),
      join(nuxt.options.srcDir, 'app'),
    ])
  },
})

Type

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

Параметры

paths: A path or an array of paths to resolve.

options: Options to pass to the resolver. This object can have the following properties:

PropertyTypeRequiredDescription
cwdstringfalseBase for resolving paths from. Default is Nuxt rootDir.
aliasRecord<string, string>falseAn object of aliases. Default is Nuxt configured aliases.
extensionsstring[]falseThe file extensions to try. Default is Nuxt configured extensions.
virtualbooleanfalseWhether to resolve files that exist in the Nuxt VFS (for example, as a Nuxt template).
fallbackToOriginalbooleanfalseWhether to fallback to the original path if the resolved path does not exist instead of returning the normalized input path.

createResolver

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

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

Usage

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

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

Type

function createResolver (basePath: string | URL): Resolver

Параметры

basePath: A base path to resolve from. It can be a string or a URL.

Return Value

The createResolver function returns an object with the following properties:

PropertyTypeDescription
resolve(path: string) => stringA function that resolves a path relative to the base path.
resolvePath(path: string, options?: ResolvePathOptions) => Promise<string>A function that resolves a path relative to the base path and respects Nuxt alias and extensions options.

Примеры

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'))
      }
    })
  },
})