devin15/cursor2api-rust
0
1#!/usr/bin/env node2 3const { minify: minifyHtml } = require('html-minifier-terser');4const { minify: minifyJs } = require('terser');5const CleanCSS = require('clean-css');6const fs = require('fs');7const path = require('path');8 9// 配置选项10const options = {11 collapseWhitespace: true,12 removeComments: true,13 removeEmptyAttributes: true,14 removeOptionalTags: true,15 removeRedundantAttributes: true,16 removeScriptTypeAttributes: true,17 removeStyleLinkTypeAttributes: true,18 minifyCSS: true,19 minifyJS: true,20 processScripts: ['application/json'],21};22 23// CSS 压缩选项24const cssOptions = {25 level: 226};27 28// 处理文件29async function minifyFile(inputPath, outputPath) {30 try {31 const ext = path.extname(inputPath).toLowerCase();32 const content = fs.readFileSync(inputPath, 'utf8');33 let minified;34 35 switch (ext) {36 case '.html':37 minified = await minifyHtml(content, options);38 break;39 case '.js':40 const result = await minifyJs(content);41 minified = result.code;42 break;43 case '.css':44 minified = new CleanCSS(cssOptions).minify(content).styles;45 break;46 default:47 throw new Error(`Unsupported file type: ${ext}`);48 }49 50 fs.writeFileSync(outputPath, minified);51 console.log(`✓ Minified ${path.basename(inputPath)} -> ${path.basename(outputPath)}`);52 } catch (err) {53 console.error(`✗ Error processing ${inputPath}:`, err);54 process.exit(1);55 }56}57 58// 主函数59async function main() {60 // 获取命令行参数,跳过前两个参数(node和脚本路径)61 const files = process.argv.slice(2);62 63 if (files.length === 0) {64 console.error('No input files specified');65 process.exit(1);66 }67 68 const staticDir = path.join(__dirname, '..', 'static');69 70 for (const file of files) {71 const inputPath = path.join(staticDir, file);72 const ext = path.extname(file);73 const outputPath = path.join(74 staticDir,75 file.replace(ext, `.min${ext}`)76 );77 await minifyFile(inputPath, outputPath);78 }79}80 81main();