nuxt logo

문서 번역(비공식)

경로 해결

Nuxt Kit은 경로를 해결하는 데 도움이 되는 유틸리티 세트를 제공합니다. 이 함수들은 현재 모듈에 상대적인 경로를 이름이나 확장자가 불명확한 상태에서 해결할 수 있게 해줍니다.

때때로 현재 모듈에 상대적인 경로를 이름이나 확장자가 불명확한 상태에서 해결해야 할 때가 있습니다. 예를 들어, 모듈과 같은 디렉토리에 위치한 플러그인을 추가하고 싶을 수 있습니다. 이러한 경우를 처리하기 위해 nuxt는 경로를 해결하는 유틸리티 세트를 제공합니다. resolvePathresolveAlias는 현재 모듈에 상대적인 경로를 해결하는 데 사용됩니다. 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: 해결자에 전달할 옵션입니다. 이 객체는 다음 속성을 가질 수 있습니다:

속성타입필수 여부설명
cwdstringfalse경로를 해결할 기준입니다. 기본값은 Nuxt rootDir입니다.
aliasRecord<string, string>false별칭의 객체입니다. 기본값은 Nuxt에서 설정된 별칭입니다.
extensionsstring[]false시도할 파일 확장자입니다. 기본값은 Nuxt에서 설정된 확장자입니다.
virtualbooleanfalseNuxt VFS에 존재하는 파일을 해결할지 여부입니다 (예: Nuxt 템플릿으로서).
fallbackToOriginalbooleanfalse해결된 경로가 존재하지 않을 경우 정규화된 입력 경로를 반환하는 대신 원래 경로로 되돌아갈지 여부입니다.

예제

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: 해결자에 전달할 옵션입니다. 이 객체는 다음 속성을 가질 수 있습니다:

속성타입필수 여부설명
cwdstringfalse경로를 해결할 기준입니다. 기본값은 Nuxt rootDir입니다.
aliasRecord<string, string>false별칭의 객체입니다. 기본값은 Nuxt에서 설정된 별칭입니다.
extensionsstring[]false시도할 파일 확장자입니다. 기본값은 Nuxt에서 설정된 확장자입니다.
virtualbooleanfalseNuxt VFS에 존재하는 파일을 해결할지 여부입니다 (예: Nuxt 템플릿으로서).
fallbackToOriginalbooleanfalse해결된 경로가 존재하지 않을 경우 정규화된 입력 경로를 반환하는 대신 원래 경로로 되돌아갈지 여부입니다.

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