| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- # unplugin-auto-import
- [](https://www.npmjs.com/package/unplugin-auto-import)
- Auto import APIs on-demand for Vite, Webpack, Rollup and esbuild. With TypeScript support. Powered by [unplugin](https://github.com/unjs/unplugin).
- ---
- without
- ```ts
- import { computed, ref } from 'vue'
- const count = ref(0)
- const doubled = computed(() => count.value * 2)
- ```
- with
- ```ts
- const count = ref(0)
- const doubled = computed(() => count.value * 2)
- ```
- ---
- without
- ```tsx
- import { useState } from 'react'
- export function Counter() {
- const [count, setCount] = useState(0)
- return <div>{ count }</div>
- }
- ```
- with
- ```tsx
- export function Counter() {
- const [count, setCount] = useState(0)
- return <div>{ count }</div>
- }
- ```
- ## Install
- ```bash
- npm i -D unplugin-auto-import
- ```
- <details>
- <summary>Vite</summary><br>
- ```ts
- // vite.config.ts
- import AutoImport from 'unplugin-auto-import/vite'
- export default defineConfig({
- plugins: [
- AutoImport({ /* options */ }),
- ],
- })
- ```
- Example: [`playground/`](./playground/)
- <br></details>
- <details>
- <summary>Rollup</summary><br>
- ```ts
- // rollup.config.js
- import AutoImport from 'unplugin-auto-import/rollup'
- export default {
- plugins: [
- AutoImport({ /* options */ }),
- // other plugins
- ],
- }
- ```
- <br></details>
- <details>
- <summary>Webpack</summary><br>
- ```ts
- // webpack.config.js
- module.exports = {
- /* ... */
- plugins: [
- require('unplugin-auto-import/webpack')({ /* options */ }),
- ],
- }
- ```
- <br></details>
- <details>
- <summary>Nuxt</summary><br>
- > You **don't need** this plugin for Nuxt, it's already builtin.
- <br></details>
- <details>
- <summary>Vue CLI</summary><br>
- ```ts
- // vue.config.js
- module.exports = {
- configureWebpack: {
- plugins: [
- require('unplugin-auto-import/webpack')({ /* options */ }),
- ],
- },
- }
- ```
- <br></details>
- <details>
- <summary>Quasar</summary><br>
- ```ts
- // quasar.conf.js
- const AutoImportPlugin = require('unplugin-auto-import/webpack')
- module.exports = {
- build: {
- chainWebpack(chain) {
- chain.plugin('unplugin-auto-import').use(
- AutoImportPlugin({ /* options */ }),
- )
- },
- },
- }
- ```
- <br></details>
- <details>
- <summary>esbuild</summary><br>
- ```ts
- // esbuild.config.js
- import { build } from 'esbuild'
- build({
- /* ... */
- plugins: [
- require('unplugin-auto-import/esbuild')({
- /* options */
- }),
- ],
- })
- ```
- <br></details>
- <details>
- <summary>Astro</summary><br>
- ```ts
- // astro.config.mjs
- import AutoImport from 'unplugin-auto-import/astro'
- export default defineConfig({
- integrations: [
- AutoImport({
- /* options */
- })
- ],
- })
- ```
- <br></details>
- ## Configuration
- ```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]'],
- ],
- },
- ],
- // Auto import for module exports under directories
- // by default it only scan one level of modules under the directory
- dirs: [
- // './hooks',
- // './composables' // only root modules
- // './composables/**', // all nested modules
- // ...
- ],
- // 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',
- // Auto import inside Vue template
- // see https://github.com/unjs/unimport/pull/15 and https://github.com/unjs/unimport/pull/72
- vueTemplate: false,
- // Custom resolvers, compatible with `unplugin-vue-components`
- // see https://github.com/antfu/unplugin-auto-import/pull/23/
- resolvers: [
- /* ... */
- ],
- // 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')
- },
- })
- ```
- Refer to the [type definitions](./src/types.ts) for more options.
- ## Presets
- See [src/presets](./src/presets).
- ## TypeScript
- In order to properly hint types for auto-imported APIs
- <table>
- <tr>
- <td width="400px" valign="top">
- 1. Enable `options.dts` so that `auto-imports.d.ts` file is automatically generated
- 2. Make sure `auto-imports.d.ts` is not excluded in `tsconfig.json`
- </td>
- <td width="600px"><br>
- ```ts
- AutoImport({
- dts: true // or a custom path
- })
- ```
- </td>
- </tr>
- </table>
- ## 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`:
- <table>
- <tr>
- <td width="400px">
- 1. Enable `eslintrc.enabled`
- </td>
- <td width="600px"><br>
- ```ts
- AutoImport({
- eslintrc: {
- enabled: true, // <-- this
- },
- })
- ```
- </td></tr></table>
- <table><tr><td width="400px">
- 2. Update your `eslintrc`:
- [Extending Configuration Files](https://eslint.org/docs/user-guide/configuring/configuration-files#extending-configuration-files)
- </td>
- <td width="600px"><br>
- ```ts
- // .eslintrc.js
- module.exports = {
- extends: [
- './.eslintrc-auto-import.json',
- ],
- }
- ```
- </td>
- </tr>
- </table>
- ## FAQ
- ### Compare to [`unimport`](https://github.com/unjs/unimport)
- 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 capability like resolvers. Development of new features will mostly happend in `unimport` from now.
- ### Compare to [`vue-global-api`](https://github.com/antfu/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!
- ## Sponsors
- <p align="center">
- <a href="https://cdn.jsdelivr.net/gh/antfu/static/sponsors.svg">
- <img src='https://cdn.jsdelivr.net/gh/antfu/static/sponsors.svg'/>
- </a>
- </p>
- ## License
- [MIT](./LICENSE) License © 2021 [Anthony Fu](https://github.com/antfu)
|