Files
xuanheng-website/_tools/prune-images.js
T
dsh f81d41c5ca 初始化:炫恒网络官网(五个页面)
站点:纯静态 HTML + CSS + 原生 JS,零框架零构建
页面:首页 / 合作品牌 / 荣誉资质 / 客户案例 / 关于我们

内容:
- site/          站点本体(含已压缩 webp 图片,约 4.8 MB)
- deploy/        Docker Compose / Caddy / Apache 部署配置
- _tools/        开发自检脚本与部署脚本
- Dockerfile     自建 nginx 镜像方案
- README.md      项目文档

设计:品牌黄 #ffc107 + 白,深蓝仅用于页脚;菜单长期置顶;
      交互动效只加在关键词与区块级元素上。

素材说明:原始素材(背景图/老网站/方案/荣誉资质/合作品牌,约 290 MB)
         未纳入版本控制,站点使用的是 site/assets 内已处理压缩的图片。
2026-10-13 16:12:41 +08:00

38 lines
1.4 KiB
JavaScript

// 清理未被任何页面 / CSS / JS 引用的图片资源
const fs = require('fs');
const path = require('path');
const SITE = path.join(__dirname, '..', 'site');
const IMG = path.join(SITE, 'assets', 'img');
// 1) 收集所有引用
let refs = '';
for (const f of ['index.html', 'brands.html', 'honors.html', 'cases.html', 'about.html',
'assets/css/main.css', 'assets/js/main.js', 'assets/lqip.css', 'assets/lqip.js']) {
refs += fs.readFileSync(path.join(SITE, f), 'utf8');
}
// 2) 保留清单(lqip.js 里以 base64 形式存在,不需要单独文件)
const KEEP_EXTRA = [];
function walk(dir) {
let out = [];
for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
const p = path.join(dir, e.name);
if (e.isDirectory()) out = out.concat(walk(p));
else out.push(p);
}
return out;
}
let removed = 0, removedBytes = 0;
for (const p of walk(IMG)) {
const rel = 'assets/img/' + path.relative(IMG, p).split(path.sep).join('/');
const name = path.basename(p);
if (refs.includes(rel) || refs.includes(name) || KEEP_EXTRA.includes(rel)) continue;
const size = fs.statSync(p).size;
fs.unlinkSync(p);
removed++; removedBytes += size;
console.log(' 删除 ' + rel + ' (' + (size / 1024).toFixed(1) + ' KB)');
}
console.log('\n共删除 ' + removed + ' 个未引用文件,释放 ' + (removedBytes / 1024).toFixed(0) + ' KB');