unplugin-auto-import

Auto import APIs on-demand for Vite, Webpack, Rspack, Rollup and esbuild. With TypeScript support. Powered by unplugin.
without
import { computed, ref } from 'vue'
const count = ref(0)
const doubled = computed(() => count.value * 2)
with
const count = ref(0)
const doubled = computed(() => count.value * 2)
without
import { useState } from 'react'
export function Counter() {
const [count, setCount] = useState(0)
return <div>{ count }</div>
}
with
export function Counter() {
const [count, setCount] = useState(0)
return <div>{ count }</div>
}
Install
npm i -D unplugin-auto-import
Vite
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
plugins: [
AutoImport({ }),
],
})
Example: playground/
Rollup
import AutoImport from 'unplugin-auto-import/rollup'
export default {
plugins: [
AutoImport({ }),
],
}
Rolldown
import AutoImport from 'unplugin-auto-import/rolldown'
export default {
plugins: [
AutoImport({ }),
],
}
Webpack
module.exports = {
plugins: [
require('unplugin-auto-import/webpack')({ }),
],
}
Rspack
module.exports = {
plugins: [
require('unplugin-auto-import/rspack')({ }),
],
}
Nuxt
You don't need this plugin for Nuxt, it's already built-in.
Quasar
import AutoImport from 'unplugin-auto-import/vite'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [
AutoImport({ })
]
})
export default defineConfig(() => {
return {
build: {
vitePlugins: [
['unplugin-auto-import/vite', { }],
]
},
}
})
esbuild
import { build } from 'esbuild'
import AutoImport from 'unplugin-auto-import/esbuild'
build({
plugins: [
AutoImport({
}),
],
})
Astro
import AutoImport from 'unplugin-auto-import/astro'
export default defineConfig({
integrations: [
AutoImport({
})
],
})
Configuration
AutoImport({
include: [
/\.[tj]sx?$/,
/\.vue$/,
/\.vue\?vue/,
/\.vue\.[tj]sx?\?vue/,
/\.md$/,
],
imports: [
'vue',
'vue-router',
{
'@vueuse/core': [
'useMouse',
['useFetch', 'useMyFetch'],
],
'axios': [
['default', 'axios'],
],
'[package-name]': [
'[import-names]',
['[from]', '[alias]'],
],
},
{
from: 'vue-router',
imports: ['RouteLocationRaw'],
type: true,
},
],
ignore: [
'useMouse',
'useFetch'
],
defaultExportByFilename: false,
dirsScanOptions: {
filePatterns: ['*.ts'],
fileFilter: file => file.endsWith('.ts'),
types: true
},
dirs: [
'./hooks',
'./composables',
'./composables/**',
{
glob: './hooks',
types: true
},
{
glob: './composables',
types: false
}
],
dts: './auto-imports.d.ts',
dtsMode: 'append',
dtsPreserveExts: false,
ignoreDts: [
'ignoredFunction',
/^ignore_/
],
vueTemplate: false,
vueDirectives: undefined,
resolvers: [
],
viteOptimizeDeps: true,
injectAtEnd: true,
eslintrc: {
enabled: false,
filepath: './.eslintrc-auto-import.json',
globalsPropValue: true,
},
biomelintrc: {
enabled: false,
filepath: './.biomelintrc-auto-import.json',
},
dumpUnimportItems: './auto-imports.json',
})
Refer to the type definitions for more options.
Presets
See src/presets.
Package Presets
We only provide presets for the most popular packages, to use any package not included here you can install it as dev dependency and add it to the packagePresets array option:
AutoImport({
packagePresets: ['detect-browser-es']
})
You can check the Svelte example for a working example registering detect-browser-es package preset and auto importing detect function in App.svelte.
Please refer to the unimport PackagePresets jsdocs for more information about options like ignore or cache.
Note: ensure local packages used have package exports configured properly, otherwise the corresponding modules exports will not be detected.
TypeScript
In order to properly hint types for auto-imported APIs:
- Enable
options.dts so that auto-imports.d.ts file is automatically generated
- Make sure
auto-imports.d.ts is not excluded in tsconfig.json
|
AutoImport({
dts: true
})
|
For better navigation support when working with auto-imported APIs, consider using the @dxup/unimport package.
ESLint
š” When using TypeScript, we recommend to disable no-undef rule directly as TypeScript already check for them and you don't need to worry about this.
If you have encountered ESLint error of no-undef:
|
|
AutoImport({
eslintrc: {
enabled: true,
},
})
|
|
|
module.exports = {
extends: [
'./.eslintrc-auto-import.json',
],
}
|
FAQ
From v0.8.0, unplugin-auto-import uses unimport underneath. unimport is designed to be a lower-level tool (it also powered Nuxt's auto import). You can think unplugin-auto-import is a wrapper of it that provides more user-friendly config APIs and capabilities like resolvers. Development of new features will mostly happen in unimport from now.
You can think of this plugin as a successor to vue-global-api, but offering much more flexibility and bindings with libraries other than Vue (e.g. React).
Pros
- Flexible and customizable
- Tree-shakable (on-demand transforming)
- No global population
Cons
- Relying on build tools integrations (while
vue-global-api is pure runtime) - but hey, we have supported quite a few of them already!
License
MIT License Ā© 2021-PRESENT Anthony Fu