mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-11 16:43:55 +00:00
264 lines
5.1 KiB
Markdown
264 lines
5.1 KiB
Markdown
|
---
|
||
|
title: Resolving
|
||
|
description: Nuxt Kit provides a set of utilities to help you resolve paths. These functions allow you to resolve paths relative to the current module, with unknown name or extension.
|
||
|
---
|
||
|
|
||
|
# Resolving
|
||
|
|
||
|
[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/resolve.ts)
|
||
|
|
||
|
Sometimes you need to resolve a paths: relative to the current module, with unknown name or extension. For example, you may want to add a plugin that is located in the same directory as the module. To handle this cases, nuxt provides a set of utilities to resolve paths. `resolvePath` and `resolveAlias` are used to resolve paths relative to the current module. `findPath` is used to find first existing file in given paths. `createResolver` is used to create resolver relative to base path.
|
||
|
|
||
|
## `resolvePath`
|
||
|
|
||
|
Resolves full path to a file or directory respecting Nuxt alias and extensions options. If path could not be resolved, normalized input path will be returned.
|
||
|
|
||
|
### Type
|
||
|
|
||
|
```ts
|
||
|
async function resolvePath (path: string, options?: ResolvePathOptions): Promise<string>
|
||
|
```
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
#### `path`
|
||
|
|
||
|
**Type**: `string`
|
||
|
|
||
|
**Required**: `true`
|
||
|
|
||
|
Path to resolve.
|
||
|
|
||
|
#### `options`
|
||
|
|
||
|
**Type**: `ResolvePathOptions`
|
||
|
|
||
|
**Default**: `{}`
|
||
|
|
||
|
Options to pass to the resolver. This object can have the following properties:
|
||
|
|
||
|
- `cwd` (optional)
|
||
|
|
||
|
**Type**: `string`
|
||
|
|
||
|
**Default**: `process.cwd()`
|
||
|
|
||
|
Current working directory.
|
||
|
|
||
|
- `alias` (optional)
|
||
|
|
||
|
**Type**: `Record<string, string>`
|
||
|
|
||
|
**Default**: `{}`
|
||
|
|
||
|
Alias map.
|
||
|
|
||
|
- `extensions` (optional)
|
||
|
|
||
|
**Type**: `string[]`
|
||
|
|
||
|
**Default**: `['.js', '.mjs', '.ts', '.jsx', '.tsx', '.json']`
|
||
|
|
||
|
Extensions to try.
|
||
|
|
||
|
### Examples
|
||
|
|
||
|
```ts
|
||
|
// https://github.com/P4sca1/nuxt-headlessui
|
||
|
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`
|
||
|
|
||
|
Resolves path aliases respecting Nuxt alias options.
|
||
|
|
||
|
### Type
|
||
|
|
||
|
```ts
|
||
|
function resolveAlias (path: string, alias?: Record<string, string>): string
|
||
|
```
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
#### `path`
|
||
|
|
||
|
**Type**: `string`
|
||
|
|
||
|
**Required**: `true`
|
||
|
|
||
|
Path to resolve.
|
||
|
|
||
|
#### `alias`
|
||
|
|
||
|
**Type**: `Record<string, string>`
|
||
|
|
||
|
**Default**: `{}`
|
||
|
|
||
|
Alias map. If not provided, it will be read from `nuxt.options.alias`.
|
||
|
|
||
|
## `findPath`
|
||
|
|
||
|
Try to resolve first existing file in given paths.
|
||
|
|
||
|
### Type
|
||
|
|
||
|
```ts
|
||
|
async function findPath (paths: string | string[], options?: ResolvePathOptions, pathType: 'file' | 'dir'): Promise<string | null>
|
||
|
|
||
|
interface ResolvePathOptions {
|
||
|
cwd?: string
|
||
|
alias?: Record<string, string>
|
||
|
extensions?: string[]
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
#### `paths`
|
||
|
|
||
|
**Type**: `string | string[]`
|
||
|
|
||
|
**Required**: `true`
|
||
|
|
||
|
A path or an array of paths to resolve.
|
||
|
|
||
|
#### `options`
|
||
|
|
||
|
**Type**: `ResolvePathOptions`
|
||
|
|
||
|
**Default**: `{}`
|
||
|
|
||
|
Options to pass to the resolver. This object can have the following properties:
|
||
|
|
||
|
- `cwd` (optional)
|
||
|
|
||
|
**Type**: `string`
|
||
|
|
||
|
**Default**: `process.cwd()`
|
||
|
|
||
|
Current working directory.
|
||
|
|
||
|
- `alias` (optional)
|
||
|
|
||
|
**Type**: `Record<string, string>`
|
||
|
|
||
|
**Default**: `{}`
|
||
|
|
||
|
Alias map.
|
||
|
|
||
|
- `extensions` (optional)
|
||
|
|
||
|
**Type**: `string[]`
|
||
|
|
||
|
**Default**: `['.js', '.mjs', '.ts', '.jsx', '.tsx', '.json']`
|
||
|
|
||
|
Extensions to try.
|
||
|
|
||
|
#### `pathType`
|
||
|
|
||
|
**Type**: `'file' | 'dir'`
|
||
|
|
||
|
**Default**: `'file'`
|
||
|
|
||
|
Type of path to resolve. If set to `'file'`, the function will try to resolve a file. If set to `'dir'`, the function will try to resolve a directory.
|
||
|
|
||
|
## `createResolver`
|
||
|
|
||
|
Creates resolver relative to base path.
|
||
|
|
||
|
### Type
|
||
|
|
||
|
```ts
|
||
|
function createResolver (basePath: string | URL): Resolver
|
||
|
|
||
|
interface Resolver {
|
||
|
resolve (...path: string[]): string
|
||
|
resolvePath (path: string, options?: ResolvePathOptions): Promise<string>
|
||
|
}
|
||
|
|
||
|
interface ResolvePathOptions {
|
||
|
cwd?: string
|
||
|
alias?: Record<string, string>
|
||
|
extensions?: string[]
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Parameters
|
||
|
|
||
|
#### `basePath`
|
||
|
|
||
|
**Type**: `string`
|
||
|
|
||
|
**Required**: `true`
|
||
|
|
||
|
Base path to resolve from.
|
||
|
|
||
|
### Examples
|
||
|
|
||
|
```ts
|
||
|
// https://github.com/vuejs/pinia/blob/v2/packages/nuxt
|
||
|
import {
|
||
|
defineNuxtModule,
|
||
|
isNuxt2,
|
||
|
createResolver,
|
||
|
} 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'))
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
```
|