HaoAws/build-static.js
2025-09-16 16:37:48 +08:00

98 lines
2.7 KiB
JavaScript

const { spawn } = require('child_process');
const fs = require('fs');
const path = require('path');
// 设置环境变量
process.env.NEXT_DISABLE_TELEMETRY = '1';
process.env.NODE_ENV = 'production';
process.env.BUILD_MODE = 'static';
console.log('🚀 开始静态构建...');
// 清理函数
function cleanup() {
const dirs = ['.next', 'out'];
dirs.forEach(dir => {
try {
if (fs.existsSync(dir)) {
fs.rmSync(dir, { recursive: true, force: true });
console.log(`✅ 清理了 ${dir} 目录`);
}
} catch (error) {
console.log(`⚠️ 清理 ${dir} 时遇到问题,继续执行...`);
}
});
}
// 构建函数
function build() {
return new Promise((resolve, reject) => {
const buildProcess = spawn('npx', ['next', 'build'], {
stdio: 'inherit',
shell: true,
env: {
...process.env,
NEXT_DISABLE_TELEMETRY: '1',
NODE_ENV: 'production',
BUILD_MODE: 'static'
}
});
buildProcess.on('close', (code) => {
if (code === 0) {
console.log('✅ 构建成功完成!');
resolve();
} else {
console.log(`❌ 构建失败,退出码: ${code}`);
reject(new Error(`Build failed with code ${code}`));
}
});
buildProcess.on('error', (error) => {
console.error('❌ 构建过程出错:', error);
reject(error);
});
});
}
// 验证输出
function verifyOutput() {
const outDir = 'out';
if (fs.existsSync(outDir)) {
const files = fs.readdirSync(outDir);
console.log(`✅ 输出目录包含 ${files.length} 个文件/文件夹`);
// 检查关键文件
const keyFiles = ['index.html', 'zh-TW', 'en', '_next'];
keyFiles.forEach(file => {
if (files.includes(file)) {
console.log(`✅ 找到: ${file}`);
} else {
console.log(`⚠️ 缺失: ${file}`);
}
});
} else {
console.log('❌ 输出目录不存在');
}
}
// 主执行流程
async function main() {
try {
console.log('🧹 清理旧文件...');
cleanup();
console.log('🔨 开始构建...');
await build();
console.log('🔍 验证输出...');
verifyOutput();
console.log('🎉 静态构建完成! 使用 "npm run serve" 预览网站');
} catch (error) {
console.error('❌ 构建失败:', error.message);
process.exit(1);
}
}
main();