search-syntax-pro/scripts/post-build.js
2025-11-07 13:36:51 +08:00

88 行
2.5 KiB
JavaScript

/**
* 构建后处理脚本
* 复制必要的静态文件到 dist 目录
*/
import { copyFileSync, mkdirSync, existsSync, readdirSync, statSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const rootDir = join(__dirname, '..');
const distDir = join(rootDir, 'dist');
const publicDir = join(rootDir, 'public');
console.log('📦 开始后构建处理...\n');
// 确保 dist 目录存在
if (!existsSync(distDir)) {
mkdirSync(distDir, { recursive: true });
}
/**
* 递归复制目录
* @param {string} src 源目录
* @param {string} dest 目标目录
*/
function copyDirectory(src, dest) {
if (!existsSync(dest)) {
mkdirSync(dest, { recursive: true });
}
const entries = readdirSync(src, { withFileTypes: true });
for (const entry of entries) {
const srcPath = join(src, entry.name);
const destPath = join(dest, entry.name);
if (entry.isDirectory()) {
copyDirectory(srcPath, destPath);
} else {
copyFileSync(srcPath, destPath);
console.log(` ✓ 复制: ${entry.name}`);
}
}
}
// 1. 复制 manifest.json
console.log('📋 复制 manifest.json...');
try {
const manifestSrc = join(publicDir, 'manifest.json');
const manifestDest = join(distDir, 'manifest.json');
copyFileSync(manifestSrc, manifestDest);
console.log(' ✓ manifest.json 已复制\n');
} catch (error) {
console.error(' ✗ 复制 manifest.json 失败:', error.message);
}
// 2. 复制 icons 目录
console.log('🎨 复制图标文件...');
try {
const iconsSrc = join(publicDir, 'icons');
const iconsDest = join(distDir, 'icons');
copyDirectory(iconsSrc, iconsDest);
console.log(' ✓ 所有图标已复制\n');
} catch (error) {
console.error(' ✗ 复制图标失败:', error.message);
}
// 3. 复制 _locales 目录(如果存在)
console.log('🌐 复制语言文件...');
try {
const localesSrc = join(publicDir, '_locales');
if (existsSync(localesSrc)) {
const localesDest = join(distDir, '_locales');
copyDirectory(localesSrc, localesDest);
console.log(' ✓ 语言文件已复制\n');
} else {
console.log(' ⚠ _locales 目录不存在,跳过\n');
}
} catch (error) {
console.error(' ✗ 复制语言文件失败:', error.message);
}
console.log('✅ 构建后处理完成!\n');
console.log('📦 生产构建已准备就绪: dist/');
console.log('💡 提示: 可以将 dist/ 目录加载为 Chrome 扩展进行测试\n');