경로 해결
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
: 해결자에 전달할 옵션입니다. 이 객체는 다음 속성을 가질 수 있습니다:
속성 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
cwd | string | false | 경로를 해결할 기준입니다. 기본값은 Nuxt rootDir입니다. |
alias | Record<string, string> | false | 별칭의 객체입니다. 기본값은 Nuxt에서 설정된 별칭입니다. |
extensions | string[] | false | 시도할 파일 확장자입니다. 기본값은 Nuxt에서 설정된 확장자입니다. |
virtual | boolean | false | Nuxt VFS에 존재하는 파일을 해결할지 여부입니다 (예: Nuxt 템플릿으로서). |
fallbackToOriginal | boolean | false | 해결된 경로가 존재하지 않을 경우 정규화된 입력 경로를 반환하는 대신 원래 경로로 되돌아갈지 여부입니다. |
예제
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 VFS에 존재하는 파일을 해결할지 여부입니다 (예: Nuxt 템플릿으로서). |
fallbackToOriginal | boolean | false | 해결된 경로가 존재하지 않을 경우 정규화된 입력 경로를 반환하는 대신 원래 경로로 되돌아갈지 여부입니다. |
createResolver
기본 경로에 상대적인 해결자를 생성합니다.
createResolver에 대한 Vue School 비디오를 시청하세요.
사용법
import { defineNuxtModule, createResolver } from '@nuxt/kit'
export default defineNuxtModule({
async 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 별칭 및 확장 옵션을 준수하는 함수입니다. |
예제
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'))
}
})
},
})
※이 페이지는 Nuxt.js 공식 문서의 비공식 번역 페이지입니다.
공식 문서의 해당 페이지는 여기 있습니다:
https://nuxt.com/docs/3.x/api/kit/resolving