Files
AllinSSL/frontend/.doc/plugin-replace-name.md
2026-01-13 17:47:39 +08:00

3.0 KiB
Raw Blame History

Vite 文件名称替换插件设计方案

一、插件核心目标

实现一个基于 Vite 的文件名称替换插件,通过 Node.js 文件系统 API在开发或构建过程中根据预设规则自动重命名指定文件支持灵活的匹配与替换逻辑。

二、核心功能设计

  1. 规则配置系统

    • 支持多组替换规则(从字符串/正则到目标字符串的映射)
    • 支持路径过滤include 包含规则、exclude 排除规则)
    • 可配置执行时机(开发模式/构建模式/Watch 模式)
  2. 文件处理流程

    • 基于 Vite 插件钩子configureServer、buildStart、watchChange 等)触发文件扫描
    • 递归遍历目标目录,收集符合匹配规则的文件路径
    • 对文件路径应用替换规则,生成新文件名
    • 执行文件重命名操作(含冲突检测)
  3. 冲突处理机制

    • 重命名前检查目标路径是否已存在
    • 提供冲突处理策略配置(跳过/覆盖/报错)
    • 记录操作日志,便于问题追踪

三、实现架构

  1. 配置解析层

    • 定义配置schema规则格式、匹配模式、执行时机等
    • 合并默认配置与用户配置
    • 验证配置有效性
  2. 文件扫描层

    • 基于 glob 模式匹配文件
    • 处理 include/exclude 过滤逻辑
    • 区分文件/目录类型
  3. 规则应用层

    • 实现字符串替换引擎(支持普通字符串和正则表达式)
    • 处理路径分割与重组(区分目录名和文件名)
    • 支持链式规则应用(多规则依次执行)
  4. 文件操作层

    • 封装 Node.js fs 模块rename、stat、access 等)
    • 实现异步操作队列(避免并发冲突)
    • 添加操作事务支持(失败可回滚)

四、Vite 集成点

  1. 开发模式集成

    • 通过 configureServer 钩子初始化插件
    • 监听 server.watcher 事件处理文件新增/修改
    • 在服务器启动完成后执行初始扫描
  2. 构建模式集成

    • 在 buildStart 钩子触发预处理扫描
    • 通过 writeBundle 钩子处理输出目录文件
    • 配合 rollup 的 asset 处理钩子拦截资源生成
  3. 插件生命周期

    • 初始化:解析配置、注册钩子
    • 运行时:响应文件变化、执行重命名
    • 销毁:清理缓存、释放资源

五、使用场景

  1. 统一文件命名规范(如驼峰转下划线)
  2. 批量添加/移除文件前缀/后缀
  3. 根据环境变量动态调整文件名
  4. 处理国际化资源文件命名
  5. 构建时生成带哈希值的文件名(补充 Vite 内置功能)

六、扩展能力

  1. 支持自定义替换函数(用户可编写复杂逻辑)
  2. 提供预览模式(仅显示替换结果不执行实际操作)
  3. 支持配置文件导出/导入
  4. 集成 Vite 配置的 resolve.alias 路径解析

该方案通过分层设计保证了插件的灵活性和可扩展性,既满足基础的文件名替换需求,又能应对复杂的自定义场景,同时遵循 Vite 插件开发最佳实践确保良好的兼容性。