What is unplugin-auto-import?
unplugin-auto-import is a powerful tool for automatically importing functions, components, and other modules in your JavaScript or TypeScript projects. It helps to reduce boilerplate code and improve development efficiency by eliminating the need to manually import frequently used modules.
What are unplugin-auto-import's main functionalities?
Automatic Import of Functions
Automatically imports functions from specified libraries (e.g., Vue and Vue Router) without needing to manually import them in each file.
module.exports = {
plugins: [
require('unplugin-auto-import/webpack')({
imports: ['vue', 'vue-router'],
}),
],
};
Custom Imports
Allows you to specify custom imports from libraries like Lodash, so you can use functions like debounce and throttle without manual imports.
module.exports = {
plugins: [
require('unplugin-auto-import/webpack')({
imports: [
{
'lodash': [
'debounce',
'throttle'
]
}
],
}),
],
};
TypeScript Support
Generates TypeScript declaration files for the auto-imported modules, ensuring type safety and better development experience.
module.exports = {
plugins: [
require('unplugin-auto-import/webpack')({
dts: true,
}),
],
};
ESLint Integration
Integrates with ESLint to ensure that auto-imported modules are recognized and do not trigger linting errors.
module.exports = {
plugins: [
require('unplugin-auto-import/webpack')({
eslintrc: {
enabled: true,
},
}),
],
};
Other packages similar to unplugin-auto-import
babel-plugin-auto-import
babel-plugin-auto-import is a Babel plugin that automatically imports specified modules when they are used in your code. It is similar to unplugin-auto-import but is specifically designed to work with Babel, making it a good choice for projects that already use Babel for transpilation.
eslint-plugin-import
eslint-plugin-import is an ESLint plugin that helps manage and validate import statements in your code. While it does not automatically import modules, it provides rules to ensure that imports are correctly used and can help prevent common issues related to imports.
unplugin-auto-import
Auto import APIs on-demand for Vite, Webpack, 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({ }),
],
}
Webpack
module.exports = {
plugins: [
require('unplugin-auto-import/webpack')({ }),
],
}
Nuxt
export default {
buildModules: [
['unplugin-auto-import/nuxt', { }],
],
}
This module works for both Nuxt 2 and Nuxt Vite
Vue CLI
module.exports = {
configureWebpack: {
plugins: [
require('unplugin-auto-import/webpack')({ }),
],
},
}
Quasar
const AutoImportPlugin = require('unplugin-auto-import/webpack')
module.exports = {
build: {
chainWebpack(chain) {
chain.plugin('unplugin-auto-import').use(
AutoImportPlugin({ }),
)
},
},
}
esbuild
import { build } from 'esbuild'
build({
plugins: [
require('unplugin-auto-import/esbuild')({
}),
],
})
Configuration
AutoImport({
include: [
/\.[tj]sx?$/,
/\.vue$/, /\.vue\?vue/,
/\.md$/,
],
imports: [
'vue',
'vue-router',
{
'@vueuse/core': [
'useMouse',
['useFetch', 'useMyFetch'],
],
'axios': [
['default', 'axios'],
],
'[package-name]': [
'[import-names]',
['[from]', '[alias]'],
],
},
],
eslintrc: {
enabled: false,
filepath: './.eslintrc-auto-import.json',
globalsPropValue: true,
},
resolvers: [
],
dts: './auto-imports.d.ts',
})
Refer to the type definitions for more options.
Presets
See src/presets.
ESLint - eslint(no-undef)
Configure options.eslintrc
, and modify your eslint configuration file.
Example:
module.exports = {
extends: [
'./.eslintrc-auto-import.json',
],
}
ESLint Docs: Extending Configuration Files
Note: .eslintrc-auto-import.json
is generated automatically, If the configuration file changes do not take effect in time, please check the configuration file, restart eslint server or the editor
TypeScript
In order to properly hint types for auto-imported APIs, make sure:
- to configure
options.dts
so that auto-imports.d.ts
file is automatically generated - to include
auto-imports.d.ts
in tsconfig.json
FAQ
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 Anthony Fu