Resolving
Иногда вам необходимо разрешать пути: относительные к текущему модулю, с неизвестным именем или расширением. Например, вы можете захотеть добавить плагин, который находится в той же директории, что и модуль. Для обработки таких случаев 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: опции резолвера:
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
cwd | string | нет | База для разрешения путей. По умолчанию — rootDir Nuxt. |
alias | Record<string, string> | нет | Объект алиасов. По умолчанию — алиасы Nuxt. |
extensions | string[] | нет | Расширения файлов для перебора. По умолчанию — из конфига Nuxt. |
virtual | boolean | нет | Разрешать файлы из виртуальной ФС Nuxt (например шаблоны). |
fallbackToOriginal | boolean | нет | При отсутствии файла возвращать исходный путь вместо нормализованного. |
Примеры
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: опции резолвера. Объект может содержать следующие свойства:
| Свойство | Тип | Обязательный | Описание |
|---|---|---|---|
cwd | string | нет | База для разрешения путей. По умолчанию — rootDir Nuxt. |
alias | Record<string, string> | нет | Объект алиасов. По умолчанию — алиасы из конфигурации Nuxt. |
extensions | string[] | нет | Расширения файлов для подстановки. По умолчанию — из конфигурации Nuxt. |
virtual | boolean | нет | Разрешать ли файлы из виртуальной ФС Nuxt (например, шаблоны Nuxt). |
fallbackToOriginal | boolean | нет | При отсутствии разрешённого пути возвращать исходный путь вместо нормализованного. |
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'))
}
})
},
})