# @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 文件的路径随机数添加 - 提供批量处理和单文件处理功能 - 支持自定义随机数生成规则