98 lines
2.7 KiB
JavaScript
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();
|