# @baota/vite-plugin-random-cache
一个 Vite 插件,用于在编译完成后为 JS/CSS 文件路径添加随机数参数,有效解决浏览器缓存问题。
## 功能特性
- 🚀 **编译后处理**: 在 Vite 编译流程完成后自动处理目标文件路径
- 🎯 **智能扫描**: 自动扫描编译输出目录下的各种文件类型
- 🔍 **全面匹配**: 识别各种引用模式(HTML标签、CSS @import、JS import/require等)
- 🎲 **随机参数**: 为每个引用的文件路径添加唯一随机数参数
- 📁 **批量处理**: 支持批量处理和单文件处理两种模式
- 🛠️ **高度可配置**: 支持自定义随机数生成规则和处理选项
- 📝 **日志记录**: 提供详细的处理过程日志
- 🎨 **保持格式**: 处理后的文件保持原有格式和功能不变
- 📂 **路径识别**: 正确识别并处理编译后的文件路径结构
## 安装
```bash
npm install @baota/vite-plugin-random-cache --save-dev
# 或
yarn add @baota/vite-plugin-random-cache --dev
# 或
pnpm add @baota/vite-plugin-random-cache --save-dev
```
## 基础使用
### 在 Vite 配置中使用
```javascript
// vite.config.js
import { defineConfig } from 'vite';
import randomCachePlugin from '@baota/vite-plugin-random-cache';
export default defineConfig({
plugins: [
randomCachePlugin()
]
});
```
### 直接使用工具函数
```javascript
import {
processSingleFile,
processBatchFiles,
processFileContent
} from '@baota/vite-plugin-random-cache';
// 处理单个文件
processSingleFile('./dist/index.html', {
enableLog: true
});
// 批量处理文件
processBatchFiles('./dist', {
patterns: ['**/*.html', '**/*.js'],
enableLog: true
});
// 处理文件内容
const content = '';
const processed = processFileContent(content);
console.log(processed); //
```
## 配置选项
```javascript
randomCachePlugin({
// 是否包含外部链接 (默认: false)
includeExternal: false,
// 文件匹配模式 (默认: ['**/*.html', '**/*.js', '**/*.css', '**/*.jsx', '**/*.ts', '**/*.tsx'])
patterns: ['**/*.html', '**/*.js', '**/*.css', '**/*.jsx', '**/*.ts', '**/*.tsx'],
// 忽略的文件/目录 (默认: ['node_modules/**'])
// 注意: 编译后处理时通常不需要忽略输出目录
ignore: ['node_modules/**'],
// 是否启用日志 (默认: true)
enableLog: true,
// 处理模式 (默认: 'build')
// 'build': 仅在构建时处理
// 'serve': 仅在开发服务器时处理
// 'both': 构建和开发时都处理
mode: 'build',
// 自定义输出目录 (可选)
// 如果不指定,将自动使用 Vite 的输出目录
outputDir: './custom-dist',
// 自定义随机数生成器 (可选)
customGenerator: (timestamp, randomStr) => {
return `custom_${timestamp}_${randomStr}`;
}
})
```
## 支持的文件引用模式
插件能够识别和处理以下引用模式:
### HTML 文件
```html
```
### CSS 文件
```css
/* @import 语句 */
@import "reset.css";
@import url("./fonts/font.css");
/* url() 函数 */
.bg { background: url("./images/bg.jpg"); }
.font { font-face: url("./fonts/font.woff2"); }
```
### JavaScript 文件
```javascript
// ES6 import
import './styles.css';
import { utils } from './utils.js';
// CommonJS require
const config = require('./config.js');
require('./init.css');
```
## 处理结果示例
### 处理前
```html
```
### 处理后
```html
```
## 高级用法
### 自定义随机数生成
```javascript
randomCachePlugin({
customGenerator: (timestamp, randomStr) => {
// 使用版本号 + 时间戳
const version = process.env.npm_package_version || '1.0.0';
return `v${version}_${timestamp}`;
}
})
```
### 条件处理
```javascript
randomCachePlugin({
// 仅在生产环境处理
mode: process.env.NODE_ENV === 'production' ? 'build' : 'serve'
})
```
### 处理特定文件类型
```javascript
randomCachePlugin({
patterns: [
'**/*.html',
'**/*.js',
'**/*.vue', // Vue 单文件组件
'**/*.jsx', // React JSX 文件
'**/*.tsx' // TypeScript JSX 文件
]
})
```
## 注意事项
1. **外部链接**: 默认不处理外部链接(http/https),可通过 `includeExternal: true` 启用
2. **已有参数**: 如果文件路径已包含查询参数,会使用 `&` 连接新参数
3. **文件备份**: 建议在重要项目中先备份文件再使用
4. **性能考虑**: 大型项目建议合理配置 `ignore` 选项以提高处理速度
## 开发和测试
```bash
# 安装依赖
npm install
# 运行测试
npm test
# 监听测试
npm run test:watch
# 代码检查
npm run lint
# 修复代码格式
npm run lint:fix
```
## 许可证
MIT License
## 贡献
欢迎提交 Issue 和 Pull Request!
## 更新日志
### v1.0.0
- 初始版本发布
- 支持 HTML、CSS、JS 文件的路径随机数添加
- 提供批量处理和单文件处理功能
- 支持自定义随机数生成规则