Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/s3xysteak/unplugin-export-collector
Recursively get all named export from a file and out-of-the-box support unplugin-auto-import
https://github.com/s3xysteak/unplugin-export-collector
esm unplugin unplugin-auto-import utils
Last synced: about 1 month ago
JSON representation
Recursively get all named export from a file and out-of-the-box support unplugin-auto-import
- Host: GitHub
- URL: https://github.com/s3xysteak/unplugin-export-collector
- Owner: s3xysteak
- License: mit
- Created: 2024-03-13T09:08:26.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-10-15T15:58:38.000Z (2 months ago)
- Last Synced: 2024-11-11T19:42:29.303Z (about 1 month ago)
- Topics: esm, unplugin, unplugin-auto-import, utils
- Language: TypeScript
- Homepage:
- Size: 480 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README-zh.md
- License: LICENSE
Awesome Lists containing this project
README
# :tada: unplugin-export-collector
[English](./README.md) | 简体中文
收集ESM所有导出的工具,附带开箱即用的 `unplugin-auto-import` 支持。
## :hammer: Install
```sh
$ pnpm i -D unplugin-export-collector
```## :rocket: 功能
从一个ESM文件中递归的收集所有具名导出。
假设有 `src/index.ts` :
```js
// src/index.ts
export const one = 1
export * from './func1' // 从另一个文件导出。
// export * from '~/func2' // 也支持别名
export * from 'vue' // 依赖的重导出将会被忽略。
```还有 `src/func1.ts` :
```js
// src/func1.ts
function func1() {}
export { func1 as funcRe }
```只是获取所有具名导出:
```js
import { expCollector } from 'unplugin-export-collector/core'console.log(await expCollector('./src/index.ts'))
// ['one', 'funcRe']
```或者支持 `unplugin-auto-import`,你可以在下面看到完整说明,这里以Vite为例:
```js
import ExportCollector from 'unplugin-export-collector/vite'export default defineConfig({
plugins: [
ExportCollector({ /* options */ }),
],
})
```这会在打包时默认在`./src/imports.js`生成一个文件,你可以将其导出后像这样在项目中使用:
```ts
import { defineConfig } from 'vite'
import Imports from 'my-project/imports' // 你需要自行处理打包时的导出项export default defineConfig({
plugins: [
AutoImport({
imports: [
Imports()
]
}),
]
})
```同样支持使用resolvers,只需要将选项设置为 `type: 'resolvers'`:
```js
ExportCollector({
type: 'resolvers'
})
```在项目中使用:
```ts
import { defineConfig } from 'vite'
import Resolvers from 'my-project/resolvers'export default defineConfig({
plugins: [
AutoImport({
resolvers: [
Resolvers()
]
}),
]
})
```## :wrench: 使用
> 更多细节见 `test` 文件夹中的单元测试,与 `test/unplugin-lab` 中的示例。
### 生成 autoImport 方法
Vite
```ts
// vite.config.ts
import ExportCollector from 'unplugin-export-collector/vite'export default defineConfig({
plugins: [
ExportCollector({ /* options */ }),
],
})
```
Rollup
```ts
// rollup.config.js
import ExportCollector from 'unplugin-export-collector/rollup'export default {
plugins: [
ExportCollector({ /* options */ }),
// other plugins
],
}
```
Webpack
```ts
// webpack.config.js
module.exports = {
/* ... */
plugins: [
require('unplugin-export-collector/webpack').default({ /* options */ }),
],
}
```
esbuild
```ts
// esbuild.config.js
import { build } from 'esbuild'
import ExportCollector from 'unplugin-export-collector/esbuild'build({
/* ... */
plugins: [
ExportCollector({
/* options */
}),
],
})
```
### 选项:
请移步至[类型声明](./src/core/types.ts),所有选项都带有详细的注释说明。
### 获取具名导出的名称数组
像这样使用 :
```js
import { expCollector } from 'unplugin-export-collector/core'const val = await expCollector('./src') // 默认情况下基于项目根目录。
console.log(val)
// ['one', 'funcRe']
```你也可以自定义base路径。
```js
// ...
const val = await expCollector(
'./index.ts',
{
base: fileURLToPath(new URL('./src/', import.meta.url))
// alias: { '~': fileURLToPath(new URL('.', import.meta.url)) } // 也支持别名
}
)
// 结果将会和上面的例子相同。
````core` 中暴露了一系列方法,这里只做简短的说明:
- `expGenerator` 读取文件,生成autoImport方法并写入
- `expGeneratorData` 读取文件但不写入,返回autoImport方法的字符串
- `expCollector` 读取文件,返回具名导出数组
- `parser` 读取字符串,返回一层的具名导出数组和重导出路径数组