84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { spawn } from 'child_process';
|
|
import os from 'os';
|
|
|
|
// 内存限制配置(4GB总内存)
|
|
const memoryLimits = [
|
|
{ nodeOptions: '--max-old-space-size=1536', viteThreads: 1, name: '第一次尝试' },
|
|
{ nodeOptions: '--max-old-space-size=1280', viteThreads: 1, name: '第二次尝试' },
|
|
{ nodeOptions: '--max-old-space-size=1024', viteThreads: 1, name: '第三次尝试' }
|
|
];
|
|
|
|
async function runBuild(config) {
|
|
console.log(`🚀 ${config.name}: 内存限制 ${config.nodeOptions}`);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
const env = {
|
|
...process.env,
|
|
NODE_OPTIONS: config.nodeOptions,
|
|
VITE_BUILD_THREADS: config.viteThreads,
|
|
NUXT_BUILD_PARALLEL: 'false',
|
|
NUXT_SSR: 'true',
|
|
VITE_PLUGIN_VUE_MAX_PARALLEL: '1',
|
|
VITE_BUILD_MINIFY: 'esbuild',
|
|
VITE_SSR_MANIFEST: 'false',
|
|
VITE_SOURCEMAP: 'false'
|
|
};
|
|
|
|
const buildProcess = spawn('npm', ['run', 'build'], {
|
|
env,
|
|
stdio: 'inherit',
|
|
shell: true
|
|
});
|
|
|
|
buildProcess.on('close', (code) => {
|
|
if (code === 0) {
|
|
console.log(`✅ ${config.name}: 构建成功!`);
|
|
resolve(true);
|
|
} else {
|
|
console.log(`❌ ${config.name}: 构建失败,退出码 ${code}`);
|
|
resolve(false);
|
|
}
|
|
});
|
|
|
|
buildProcess.on('error', (err) => {
|
|
console.log(`❌ ${config.name}: 构建错误`, err.message);
|
|
resolve(false);
|
|
});
|
|
|
|
// 10分钟超时
|
|
setTimeout(() => {
|
|
buildProcess.kill();
|
|
console.log(`⏰ ${config.name}: 构建超时`);
|
|
resolve(false);
|
|
}, 600000);
|
|
});
|
|
}
|
|
|
|
async function main() {
|
|
console.log('🎯 开始内存优化构建(4GB限制)');
|
|
console.log(`💻 系统内存: ${Math.round(os.totalmem() / 1024 / 1024 / 1024)}GB`);
|
|
|
|
for (let i = 0; i < memoryLimits.length; i++) {
|
|
const success = await runBuild(memoryLimits[i]);
|
|
if (success) {
|
|
console.log('🎉 构建完成!');
|
|
process.exit(0);
|
|
}
|
|
|
|
if (i < memoryLimits.length - 1) {
|
|
console.log('🔄 尝试更保守的设置...');
|
|
await new Promise(resolve => setTimeout(resolve, 5000)); // 等待5秒
|
|
}
|
|
}
|
|
|
|
console.log('💥 所有构建尝试都失败了');
|
|
console.log('💡 建议:');
|
|
console.log(' 1. 增加Docker内存限制');
|
|
console.log(' 2. 使用更强大的构建机器');
|
|
console.log(' 3. 考虑在外部构建后复制结果');
|
|
process.exit(1);
|
|
}
|
|
|
|
main().catch(console.error); |