2021-10-11 12:57:54 +00:00
---
icon: IconDirectory
title: 'composables'
2022-08-13 07:27:04 +00:00
head.title: Composables Directory
2021-10-11 12:57:54 +00:00
---
2022-08-13 07:27:04 +00:00
# Composables Directory
2021-10-11 12:57:54 +00:00
2022-04-06 05:56:08 +00:00
Nuxt 3 supports `composables/` directory to automatically import your Vue composables into your application using [auto-imports ](/guide/concepts/auto-imports )!
2021-10-20 09:47:18 +00:00
2022-04-29 09:36:59 +00:00
Under the hood, Nuxt auto generates the file `.nuxt/auto-imports.d.ts` to declare the types.
Be aware that you have to run `nuxi prepare` , `nuxi dev` or `nuxi build` in order to let Nuxt generates the types. If you create a composable without having the dev server running, typescript will throw an error `Cannot find name 'useBar'.`
2022-07-21 14:04:50 +00:00
## Example
**Method 1:** Using named export
2021-10-20 09:47:18 +00:00
```js [composables/useFoo.ts]
2021-10-22 10:17:09 +00:00
export const useFoo = () => {
2021-10-20 09:47:18 +00:00
return useState('foo', () => 'bar')
}
```
2022-07-21 14:04:50 +00:00
**Method 2:** Using default export
2021-10-20 09:47:18 +00:00
```js [composables/use-foo.ts or composables/useFoo.ts]
2022-01-18 16:36:29 +00:00
// It will be available as useFoo() (camelCase of file name without extension)
2021-10-20 09:47:18 +00:00
export default function () {
2021-12-20 10:36:25 +00:00
return useState('foo', () => 'bar')
2021-10-20 09:47:18 +00:00
}
```
2022-07-21 14:04:50 +00:00
**Usage:** You can now use auto imported composable in `.js` , `.ts` and `.vue` files
2021-10-20 09:47:18 +00:00
```vue [app.vue]
< template >
< div >
{{ foo }}
< / div >
< / template >
< script setup >
const foo = useFoo()
< / script >
```
2022-04-09 09:25:13 +00:00
:LinkExample{link="/examples/auto-imports/composables"}
2022-07-21 14:04:50 +00:00
2022-08-13 07:27:04 +00:00
## How Files Are Scanned
2022-07-21 14:04:50 +00:00
Nuxt only scans files at the top level of the `composables/` directory for composables.
For example:
```bash
composables
| - useFoo.ts // scanned
| - index.ts // scanned
| - nested
| --- utils.ts // not scanned
```
Only `composables/useFoo.ts` would be searched for imports.
To get auto imports for nested modules, you could either reexport them (recommended) or configure the scanner to scan nested directories:
**Example:** re-export the composables you need from the `composables/index.ts` file:
```js [composables/index.ts]
// Enables auto import for this export
export { useBaz } from './nested/useBaz.ts'
```
**Example:** Scan nested directories inside composables:
```ts [nuxt.config.ts]
export default defineConfig({
// ...
autoImports: {
dirs: [
// Scan composables from nested directories
2022-08-15 14:14:00 +00:00
'composables/**',
// 'composables/*/index.{ts,js,mjs,mts}' // one level directories's index.js,
//'composables/**', // Scan all nested directories
2022-07-21 14:04:50 +00:00
]
}
})
```