Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
U

unimport

> 编程语言
Open source

Unified utils for auto importing APIs in modules.

684 stars0 likes1 views
WebsiteGitHub

About

Unified utils for auto importing APIs in modules.

unimport

npm version npm downloads Codecov

Unified utils for auto importing APIs in modules, used in nuxt and unplugin-auto-import

Features

  • Auto import register APIs for Vite, Webpack or esbuild powered by unplugin
  • TypeScript declaration file generation
  • Auto import for custom APIs defined under specific directories
  • Auto import for Vue template

Install

bash
# npm
npm install unimport

# yarn
yarn add unimport

# pnpm
pnpm install unimport

Usage

Plugin Usage

Powered by unplugin, unimport provides a plugin interface for bundlers.

Vite / Rollup

typescript
// vite.config.js / rollup.config.js
import Unimport from 'unimport/unplugin'

export default {
  plugins: [
    Unimport.vite({ /* plugin options */ })
  ]
}

Webpack

typescript
// webpack.config.js
import Unimport from 'unimport/unplugin'

module.exports = {
  plugins: [
    Unimport.webpack({ /* plugin options */ })
  ]
}

Programmatic Usage

javascript
// ESM
import { createUnimport } from 'unimport'

// CommonJS
const { createUnimport } = require('unimport')
javascript
const { injectImports } = createUnimport({
  imports: [{ name: 'fooBar', from: 'test-id' }]
})

// { code: "import { fooBar } from 'test-id';console.log(fooBar())" }
console.log(injectImports('console.log(fooBar())'))

Configurations

Imports Item

Named import

typescript
imports: [
  { name: 'ref', from: 'vue' },
  { name: 'useState', as: 'useSignal', from: 'react' },
]

Will be injected as:

typescript
import { useState as useSignal } from 'react'
import { ref } from 'vue'

Default import

typescript
imports: [
  { name: 'default', as: '_', from: 'lodash' }
]

Will be injected as:

typescript
import _ from 'lodash'

Namespace import

typescript
imports: [
  { name: '*', as: '_', from: 'lodash' }
]

Will be injected as:

typescript
import * as _ from 'lodash'

Export assignment import

This is a special case for libraries authored with TypeScript's export = syntax. You don't need it the most of the time.

typescript
imports: [
  { name: '=', as: 'browser', from: 'webextension-polyfill' }
]

Will be injected as:

typescript
import browser from 'webextension-polyfill'

And the type declaration will be added as:

typescript
const browser: typeof import('webextension-polyfill')

Custom Presets

Presets are provided as a shorthand for declaring imports from the same package:

typescript
presets: [
  {
    from: 'vue',
    imports: [
      'ref',
      'reactive',
      // ...
    ]
  }
]

Will be equivalent as:

typescript
imports: [
  { name: 'ref', from: 'vue' },
  { name: 'reactive', from: 'vue' },
  // ...
]

Built-in Presets

unimport also provides some built-in presets for common libraries:

typescript
presets: [
  'vue',
  'pinia',
  'vue-i18n',
  // ...
]

You can check out src/presets for all the options available or refer to the type declaration.

Exports Auto Scan

Since unimport v0.7.0, we also support auto scanning the examples from a local installed package, for example:

typescript
presets: [
  {
    package: 'h3',
    ignore: ['isStream', /^[A-Z]/, /^[a-z]*$/, r => r.length > 8]
  }
]

This will be expanded into:

typescript
imports: [
  {
    from: 'h3',
    name: 'appendHeader',
  },
  {
    from: 'h3',
    name: 'appendHeaders',
  },
  {
    from: 'h3',
    name: 'appendResponseHeader',
  },
  // ...
]

The ignore option is used to filter out the exports, it can be a string, regex or a function that returns a boolean.

By default, the result is strongly cached by the version of the package. You can disable this by setting cache: false.

Type Declarations

typescript
Unimport.vite({
  dts: true // or a path to generated file
})

Directory Auto Import

typescript
Unimport.vite({
  dirs: [
    './composables/*',
  ]
})

Scan for modules under ./composables and auto-import the named exports.

Nested Directories

typescript
Unimport.vite({
  dirs: [
    './composables/**/*',
    {
      glob: './composables/nested/**/*',
      types: false // disable scan the type declarations
    }
  ]
})

Named exports for modules under ./composables/**/* will be registered for auto imports, and filter out the types in ./composables/nested/**/*.

Directory Scan Options

You can also provide custom options for directory scan, for example:

typescript
Unimport.vite({
  dirsScanOptions: {
    filePatterns: ['*.ts'], // optional, default `['*.{ts,js,mjs,cjs,mts,cts}']`, glob patterns for matching files
    fileFilter: file => file.endsWith('.ts'), // optional, default `() => true`, filter files
    types: true, // optional, default `true`, enable/disable scan the type declarations
    cwd: process.cwd(), // optional, default `process.cwd()`, custom cwd for directory scan
  },
  dirs: [
    './composables/**/*',
    {
      glob: './composables/nested/**/*',
      types: false
    }
  ]
})

Opt-out Auto Import

You can opt-out auto-import for specific modules by adding a comment:

typescript
// @unimport-disable

It can be customized by setting commentsDisable:

typescript
Unimport.vite({
  commentsDisable: [
    '@unimport-disable',
    '@custom-imports-disable',
  ]
})

Parser

By default, unimport uses RegExp to detect unimport entries. In some cases, RegExp might not be able to detect all the entries (false positive & false negative).

For a more accurate result, you can switch to an AST-based parser:

  • acorn — powered by acorn. Assumes the input is valid vanilla JavaScript, so it should usually be used after transformations and transpilation. Requires installing acorn as an optional peer dependency.
  • oxc — powered by oxc-parser. Much faster than acorn and accepts TypeScript and JSX. Requires installing either rolldown or oxc-parser as an optional peer dependency. (If both are installed, rolldown is preferred.)
typescript
Unimport.vite({
  parser: 'oxc' // or 'acorn' or 'regex' (default)
})

To use the oxc parser, install rolldown or oxc-parser alongside unimport:

bash
npm install rolldown
# or
npm install oxc-parser

To use the acorn parser, install acorn alongside unimport:

bash
npm install acorn

Vue Template Auto Import

In Vue's template, the usage of API is in a different context than plain modules. Thus some custom transformations are required. To enable it, set addons.vueTemplate to true:

typescript
Unimport.vite({
  addons: {
    vueTemplate: true
  }
})

Caveats

When auto-import a ref, inline operations won't be auto-unwrapped.

typescript
export const counter = ref(0)
xml

  
  

  
  

  
  

We recommend using Volar for type checking, which will help you to identify the misusage.

Vue Directives Auto Import and TypeScript Declaration Generation

In Vue's template, the usage of directives is in a different context than plain modules. Thus some custom transformations are required. To enable it, set addons.vueDirectives to true:

typescript
Unimport.vite({
  addons: {
    vueDirectives: true
  }
})

Library Authors

When including directives in your presets, you should:

  • provide the corresponding imports with meta.vueDirective set to true, otherwise, unimport will not be able to detect your directives.
  • use named exports for your directives, or use default export and use as in the Import.
  • set dtsDisabled to true if you provide a type declaration for your directives.
…

Using Directory Scan and Local Directives

If you add a directory scan for your local directives in the project, you need to:

  • provide isDirective in the vueDirectives: unimport will use it to detect them (will never be called for imports with meta.vueDirective set to true).
  • use always named exports for your directives.
typescript
Unimport.vite({
  dirs: ['./directives/**'],
  addons: {
    vueDirectives: {
      isDirective: (normalizedImportFrom, _importEntry) => {
        return normalizedImportFrom.includes('/directives/')
      }
    }
  }
})

Development

  • Clone this repository
  • Enable Corepack using corepack enable (use npm i -g corepack for Node.js < 16.10)
  • Install dependencies using pnpm install
  • Run interactive tests using pnpm dev

License

Made with

Published under MIT License.

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

TypeScriptesmesmodulevitewebpack

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言