🛠️ Unindex:推荐一款自动化索引文件生成工具

📖 开发背景

作为一名前端开发者,在维护组件库和工具函数目录时,总会遇到下面的困扰:

  1. 每次新增组件/工具文件时,都需要手动更新 index.* 文件做引入或重新导出
  2. 基于构建工具的 import.meta.glob 的导入在 Re-Export 时会丢失对应的类型
  3. 不同的语言文件对索引文件的引入方式不同,但内容大体上仍然属于重复性工作

查找了 npm 暂时没有发现一个能同时满足以下需求的工具:

  • 支持可视化配置
  • 可定制生成规则
  • 支持监听模式
  • 可脱离构建工具直接运行

"既然找不到合适的轮子,那就自己造一个!" -- 于是 unindex 诞生了!

✨ unindex 的核心特点

1. 极简配置,开箱即用

ts 复制代码
// 最简单的配置
export default defineConfig({
  // 定义入口目录
  entryDir: 'src/hooks'
})

只需指定目录,unindex 就会自动生成规范的导出文件,未配置 outFile 时将尝试从匹配的文件列表中进行获取扩展名。

2. 深度定制能力

ts 复制代码
export default defineConfig({
  entryDir: 'src/hooks',
  glob: {
    patterns: '**/*.ts',
  },
  // 更改生成的代码片段
  codeGenerator: ({ file, relativePath }) => {
    return `export { default as use${pascalCase(file.slice(file.lastIndexOf('/') + 1).replace(/\.tsx?$/, ''))} } from './${relativePath}';`
  },
  // 更改输出内容
  contentGenerator: ({ codes }) => {
    return `\
/* Generated by unindex */
${codes.join('\n')}
`
  }
})

3. 多场景支持

  • 组件库开发:自动导出所有组件
  • 工具函数集:统一管理工具方法
  • 文档系统:自动生成目录索引
  • 样式管理:自动导入 CSS/SCSS 文件
ts 复制代码
// 支持配置项数组
export default defineConfig([
  {
    entryDir: 'src/hooks',
    glob: {
      // 需要匹配的文件
      patterns: '**/*.ts',

      // 忽略以 `_` 开头的文件和目录
      // ignore: '**/_*',

      // 仅忽略以 `_` 开头的文件
      ignore: '**/_.*',
    },
  },
  {
    entryDir: 'src/styles',
    glob: {
      patterns: '**/*.css',
    },
    // 更改生成的代码片段
    codeGenerator: ({ relativePath }) => `@import './${relativePath}';`,
  },
  {
    entryDir: 'docs/pages',
    // 更改输出的文件名
    outFile: 'Home.md',
    glob: {
      patterns: '**/*.md',
    },
    codeGenerator: ({ file, relativePath }) => `[${file}](./${relativePath})`,
    // 更改输出的内容
    contentGenerator: ({ codes }) => {
      return `\
# 目录

${codes.map((code) => `- ${code}`).join('\n')}
`
    },
  },
])

4. 支持监听模式

diff 复制代码
export default defineConfig({
  // 定义入口目录
  entryDir: 'src/hooks',
+  watch: true, // 优先级大于命令行 `--watch` 参数
})
sh 复制代码
npx unindex --watch

文件新增、删除、重命名时自动重新生成。

🚀 快速入门

  1. 安装:
sh 复制代码
# npm
npm i -D unindex

# yarn
yarn add -D unindex

# pnpm
pnpm add -D unindex
  1. 创建配置文件 unindex.config.[js,ts,mjs,cjs,mts,cts,json]
ts 复制代码
import { defineConfig } from 'unindex'

export default defineConfig({
  entryDir: 'src/hooks',
  glob: {
    patterns: '**/*.{ts,tsx}',
    ignore: '**/*.spec.*'
  }
})
  1. 运行:
sh 复制代码
# 命令行
npx unindex

# 或添加到 package.json
{
  "scripts": {
    "unindex": "unindex"
  }
}

结语

你的项目是否也在为导出文件烦恼?试试 unindex,让工具代替重复劳动!

项目已开源,欢迎 Star 和贡献代码!

项目地址: github.com/l246804/uni...

相关推荐
成遇5 分钟前
Eslint基础使用
javascript·typescript·es6
Mr_Mao4 小时前
Naive Ultra:中后台 Naive UI 增强组件库
前端
前端小趴菜055 小时前
React-React.memo-props比较机制
前端·javascript·react.js
摸鱼仙人~6 小时前
styled-components:现代React样式解决方案
前端·react.js·前端框架
sasaraku.7 小时前
serviceWorker缓存资源
前端
RadiumAg8 小时前
记一道有趣的面试题
前端·javascript
yangzhi_emo8 小时前
ES6笔记2
开发语言·前端·javascript
yanlele8 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
中微子10 小时前
React状态管理最佳实践
前端
烛阴10 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript