init: 初始化 AssetX 项目仓库

包含 webapp(Next.js 用户端)、webapp-back(Go 后端)、
antdesign(管理后台)、landingpage(营销落地页)、
数据库 SQL 和配置文件。
This commit is contained in:
2026-03-27 11:26:43 +00:00
commit 2ee4553b71
634 changed files with 988255 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const { optimize } = require('svgo');
// SVG优化配置
const svgoConfig = {
multipass: true,
plugins: [
{
name: 'preset-default',
params: {
overrides: {
removeViewBox: false,
cleanupIds: false,
},
},
},
'removeDimensions',
'removeStyleElement',
'removeScriptElement',
'removeComments',
'removeMetadata',
'removeEditorsNSData',
'cleanupListOfValues',
'convertStyleToAttrs',
'removeEmptyContainers',
'mergePaths',
'convertShapeToPath',
'sortAttrs',
'removeDimensions',
],
};
// 递归遍历目录
function walkDir(dir, callback) {
fs.readdirSync(dir).forEach(file => {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
walkDir(filePath, callback);
} else if (path.extname(file) === '.svg') {
callback(filePath);
}
});
}
// 优化单个SVG文件
function optimizeSvg(filePath) {
try {
const svgContent = fs.readFileSync(filePath, 'utf8');
const originalSize = Buffer.byteLength(svgContent, 'utf8');
const result = optimize(svgContent, {
path: filePath,
...svgoConfig,
});
const optimizedSize = Buffer.byteLength(result.data, 'utf8');
const savings = ((1 - optimizedSize / originalSize) * 100).toFixed(1);
fs.writeFileSync(filePath, result.data);
console.log(`${path.relative(process.cwd(), filePath)}: ${originalSize}B → ${optimizedSize}B (节省 ${savings}%)`);
return { originalSize, optimizedSize, savings: parseFloat(savings) };
} catch (error) {
console.error(`✗ 处理文件失败: ${filePath}`, error.message);
return null;
}
}
// 主函数
function main() {
const publicDir = path.join(process.cwd(), 'public');
console.log('开始优化SVG文件...\n');
let totalOriginal = 0;
let totalOptimized = 0;
let fileCount = 0;
walkDir(publicDir, (filePath) => {
const result = optimizeSvg(filePath);
if (result) {
totalOriginal += result.originalSize;
totalOptimized += result.optimizedSize;
fileCount++;
}
});
const totalSavings = ((1 - totalOptimized / totalOriginal) * 100).toFixed(1);
console.log('\n优化完成');
console.log(`处理文件: ${fileCount}`);
console.log(`原始大小: ${(totalOriginal / 1024).toFixed(2)} KB`);
console.log(`优化后: ${(totalOptimized / 1024).toFixed(2)} KB`);
console.log(`总共节省: ${totalSavings}% (${((totalOriginal - totalOptimized) / 1024).toFixed(2)} KB)`);
}
main();