🛠️ 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...

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄3 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端