| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- # unimport
- [![npm version][npm-version-src]][npm-version-href]
- [![npm downloads][npm-downloads-src]][npm-downloads-href]
- [![Github Actions][github-actions-src]][github-actions-href]
- [![Codecov][codecov-src]][codecov-href]
- > Unified utils for auto importing APIs in modules
- ## Features
- - Auto import register APIs for Vite, Webpack or esbuild powered by [unplugin](https://github.com/unjs/unplugin)
- - TypeScript declaration file generation
- - Auto import for custom APIs defined under specific directories
- - Auto import for Vue template
- ## Install
- ```sh
- # npm
- npm install unimport
- # yarn
- yarn add unimport
- # pnpm
- pnpm install unimport
- ```
- ## Usage
- ### Plugin Usage
- Powered by [unplugin](https://github.com/unjs/unplugin), `unimport` provides a plugin interface for bundlers.
- #### Vite / Rollup
- ```ts
- // vite.config.js / rollup.config.js
- import Unimport from 'unimport/unplugin'
- export default {
- plugins: [
- Unimport.vite({ /* plugin options */ })
- ]
- }
- ```
- #### Webpack
- ```ts
- // webpack.config.js
- import Unimport from 'unimport/unplugin'
- module.exports = {
- plugins: [
- Unimport.webpack({ /* plugin options */ })
- ]
- }
- ```
- ### Programmatic Usage
- ```js
- // ESM
- import { createUnimport } from 'unimport'
- // CommonJS
- const { createUnimport } = require('unimport')
- ```
- ```js
- 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
- ```ts
- imports: [
- { name: 'ref', from: 'vue' },
- { name: 'useState', as: 'useSignal', from: 'react' },
- ]
- ```
- Will be injected as:
- ```ts
- import { ref } from 'vue'
- import { useState as useSignal } from 'react'
- ```
- ###### Default import
- ```ts
- imports: [
- { name: 'default', as: '_', from: 'lodash' }
- ]
- ```
- Will be injected as:
- ```ts
- import _ from 'lodash'
- ```
- ###### Custom Presets
- Presets are provides as a shorthand for declaring imports from the same package:
- ```ts
- presets: [
- {
- from: 'vue',
- imports: [
- 'ref',
- 'reactive',
- // ...
- ]
- }
- ]
- ```
- Will be equivalent as:
- ```ts
- imports: [
- { name: 'ref', from: 'vue' },
- { name: 'reactive', from: 'vue' },
- // ...
- ]
- ```
- ###### Built-in Presets
- `unimport` also provides some builtin presets for common libraries:
- ```ts
- presets: [
- 'vue',
- 'pinia',
- 'vue-i18n',
- // ...
- ]
- ```
- You can check out [`src/presets`](./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:
- ```ts
- presets: [
- {
- package: 'h3',
- ignore: ['isStream', /^[A-Z]/, /^[a-z]*$/, r => r.length > 8]
- }
- ]
- ```
- This will be expanded into:
- ```ts
- 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
- ```ts
- Unimport.vite({
- dts: true // or a path to generated file
- })
- ```
- ### Directory Auto Import
- ```ts
- {
- dirs: [
- './composables/*'
- ]
- }
- ```
- Named exports for modules under `./composables/*` will be registered for auto imports.
- ### Opt-out Auto Import
- You can opt-out auto import for specific modules by adding a comment:
- ```ts
- // @unimport-disable
- ```
- It's can be customized by setting `commentsDisable`:
- ```ts
- Unimport.vite({
- commentsDisable: [
- '@unimport-disable',
- '@custom-imports-disable',
- ]
- })
- ```
- ### 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`:
- ```ts
- Unimport.vite({
- addons: {
- vueTemplate: true
- }
- })
- ```
- #### Caveats
- When auto-import a ref, inline operations won't be auto-unwrapped.
- ```ts
- export const counter = ref(0)
- ```
- ```html
- <template>
- <!-- this is ok -->
- <div>{{ counter }}</div>
- <!-- counter here is a ref, this won't work, volar will throw -->
- <div>{{ counter + 1 }}</div>
- <!-- use this instead -->
- <div>{{ counter.value + 1 }}</div>
- </template>
- ```
- We recommend using [Volar](https://github.com/johnsoncodehk/volar) for type checking, which will help you to identify the misusage.
- ## 💻 Development
- - Clone this repository
- - Enable [Corepack](https://github.com/nodejs/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](./LICENSE).
- <!-- Badges -->
- [npm-version-src]: https://img.shields.io/npm/v/unimport?style=flat-square
- [npm-version-href]: https://npmjs.com/package/unimport
- [npm-downloads-src]: https://img.shields.io/npm/dm/unimport?style=flat-square
- [npm-downloads-href]: https://npmjs.com/package/unimport
- [github-actions-src]: https://img.shields.io/github/workflow/status/unjs/unimport/ci/main?style=flat-square
- [github-actions-href]: https://github.com/unjs/unimport/actions?query=workflow%3Aci
- [codecov-src]: https://img.shields.io/codecov/c/gh/unjs/unimport/main?style=flat-square
- [codecov-href]: https://codecov.io/gh/unjs/unimport
|