Auflösen
Maschinelle Übersetzung ·0 % geprüft
Manchmal musst du einen Pfad auflösen, ohne seinen Namen oder seine Dateiendung zu kennen. Zum Beispiel möchtest du vielleicht ein Plugin hinzufügen, das im selben Verzeichnis wie ein Modul liegt. Für solche Fälle stellt Nuxt eine Reihe von Hilfsfunktionen zum Auflösen von Pfaden bereit. resolvePath löst Pfade standardmäßig ausgehend vom Nuxt-Stammverzeichnis auf, während resolveAlias die konfigurierten Aliasse anwendet. findPath findet die erste vorhandene Datei in einer vorgegebenen Menge von Pfaden. createResolver erstellt einen Resolver relativ zu einem Basispfad.
resolvePath
解析文件或目录的完整路径,并遵循 Nuxt 的别名和扩展名选项。如果某个路径无法解析,将返回标准化后的输入路径。
用法
import { defineNuxtModule, resolvePath } from '@nuxt/kit'
export default defineNuxtModule({
async setup () {
const entrypoint = await resolvePath('@unhead/vue')
console.log(`Unhead 入口点是 ${entrypoint}`)
},
})类型
function resolvePath (path: string, options?: ResolvePathOptions): Promise<string>参数
path:要解析的路径。
options:传递给解析器的选项。该对象可以包含以下属性:
| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
cwd | string | false | 用于解析路径的基础位置。默认是 Nuxt 的 rootDir。 |
alias | Record<string, string> | false | 一个别名对象。默认是 Nuxt 配置的别名。 |
extensions | string[] | false | 要尝试的文件扩展名。默认是 Nuxt 配置的扩展名。 |
virtual | boolean | false | 是否解析存在于 Nuxt 虚拟文件系统(例如,作为 Nuxt 模板)的文件。 |
fallbackToOriginal | boolean | false | 如果解析后的路径不存在,是否回退到原始路径,而不是返回规范化后的输入路径。 |
resolvePath folgt der Standardauflösung von Modulen und durchsucht keine Abhängigkeiten, die in anderen Paketen verschachtelt sind. Um eine Abhängigkeit aufzulösen, die dein Nuxt-Modul deklariert, verwende createResolver(import.meta.url).resolvePath(). Dadurch ist die Auflösung unabhängig davon, ob der Paketmanager die Abhängigkeit hochzieht.Beispiel
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) {
// 解析主文件(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 | false | 用于解析路径的基础位置。默认是 Nuxt 的 rootDir。 |
alias | Record<string, string> | false | 一个别名对象。默认是 Nuxt 配置的别名。 |
extensions | string[] | false | 要尝试的文件扩展名。默认是 Nuxt 配置的扩展名。 |
virtual | boolean | false | 是否解析存在于 Nuxt 虚拟文件系统(例如,作为 Nuxt 模板)的文件。 |
fallbackToOriginal | boolean | false | 如果解析后的路径不存在,是否回退到原始路径,而不是返回规范化后的输入路径。 |
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。
返回值
createResolver 函数返回一个具有以下属性的对象:
| 属性 | 类型 | 描述 |
|---|---|---|
resolve | (path: string) => string | 一个根据基路径解析路径的函数。 |
resolvePath | (path: string, options?: ResolvePathOptions) => Promise<string> | 一个根据基路径解析路径并遵循 Nuxt 别名和扩展名选项的函数。 |
Beispiel
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'))
}
})
},
})