Javascript Vue

Unplugin auto import: Auto import APIs on-demand for Vite, Webpack, Rollup and esbuild3 min read

unplugin-auto-import

Auto import APIs on-demand for Vite, Webpack, Rollup and esbuild. With TypeScript support. Powered by unplugin.

Install

npm i -D unplugin-auto-import

Vite

// vite.config.ts
import AutoImport from ‘unplugin-auto-import/vite’

export default defineConfig({
plugins: [
AutoImport({ /* options */ }),
],
})

Example: playground/

Rollup

// rollup.config.js
import AutoImport from ‘unplugin-auto-import/rollup’

export default {
plugins: [
AutoImport({ /* options */ }),
// other plugins
],
}

Webpack

// webpack.config.js
module.exports = {
/* … */
plugins: [
require(‘unplugin-auto-import/webpack’)({ /* options */ }),
],
}

Nuxt

// nuxt.config.js
export default {
buildModules: [
[‘unplugin-auto-import/nuxt’, { /* options */ }],
],
}

This module works for both Nuxt 2 and Nuxt Vite

Vue CLI

// vue.config.js
module.exports = {
configureWebpack: {
plugins: [
require(‘unplugin-auto-import/webpack’)({ /* options */ }),
],
},
}

Quasar

// quasar.conf.js
const AutoImportPlugin = require(‘unplugin-auto-import/webpack’)

module.exports = {
build: {
chainWebpack(chain) {
chain.plugin(‘unplugin-auto-import’).use(
AutoImportPlugin({ /* options */ }),
)
},
},
}

esbuild

// esbuild.config.js
import { build } from ‘esbuild’

build({
/* … */
plugins: [
require(‘unplugin-auto-import/esbuild’)({
/* options */
}),
],
})

Configuration

https://eslint.org/docs/user-guide/configuring/language-options#specifying-globals
eslintrc: {
enabled: false, // Default false
filepath: ‘./.eslintrc-auto-import.json’, // Default ./.eslintrc-auto-import.json
globalsPropValue: true, // Default true, (true | false | ‘readonly’ | ‘readable’ | ‘writable’ | ‘writeable’)
},

// custom resolvers
// see https://github.com/antfu/unplugin-auto-import/pull/23/
resolvers: [
/* … */
],

// Filepath to generate corresponding .d.ts file.
// Defaults to ‘./auto-imports.d.ts’ when typescript is installed locally.
// Set false to disable.
dts: ‘./auto-imports.d.ts’,
})”>

AutoImport({
// targets to transform
include: [
/.[tj]sx?$/, // .ts, .tsx, .js, .jsx
/.vue$/, /.vue?vue/, // .vue
/.md$/, // .md
],

// global imports to register
imports: [
// presets
‘vue’,
‘vue-router’,
// custom
{
‘@vueuse/core’: [
// named imports
‘useMouse’, // import { useMouse } from ‘@vueuse/core’,
// alias
[‘useFetch’, ‘useMyFetch’], // import { useFetch as useMyFetch } from ‘@vueuse/core’,
],
‘axios’: [
// default imports
[‘default’, ‘axios’], // import { default as axios } from ‘axios’,
],
‘[package-name]’: [
‘[import-names]’,
// alias
[‘[from]’, ‘[alias]’],
],
},
],

// Generate corresponding .eslintrc-auto-import.json file.
// eslint globals Docs – https://eslint.org/docs/user-guide/configuring/language-options#specifying-globals
eslintrc: {
enabled: false, // Default `false`
filepath: ‘./.eslintrc-auto-import.json’, // Default `./.eslintrc-auto-import.json`
globalsPropValue: true, // Default `true`, (true | false | ‘readonly’ | ‘readable’ | ‘writable’ | ‘writeable’)
},

// custom resolvers
// see https://github.com/antfu/unplugin-auto-import/pull/23/
resolvers: [
/* … */
],

// Filepath to generate corresponding .d.ts file.
// Defaults to ‘./auto-imports.d.ts’ when `typescript` is installed locally.
// Set `false` to disable.
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:

// .eslintrc.js

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

Compare to vue-global-api

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

GitHub

View Github

Pin It on Pinterest

Generated by Feedzy