mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-08 07:41:10 +08:00
73 lines
3.0 KiB
Markdown
73 lines
3.0 KiB
Markdown
### 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 插件开发最佳实践确保良好的兼容性。 |