- 引入 ConfigError/TemplateError/BuildError/FileError 与 wrapAsyncError,统一错误输出 - generator 入口接入 wrapAsyncError,确保命令行执行路径一致 - 兜底逻辑使用 instanceof,保留 BuildError/TemplateError 上下文信息 - 合并格式化提交(仅缩进/换行调整)
66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
const path = require('node:path');
|
||
const fs = require('node:fs');
|
||
|
||
function ensureDir(dirPath) {
|
||
if (!fs.existsSync(dirPath)) {
|
||
fs.mkdirSync(dirPath, { recursive: true });
|
||
}
|
||
}
|
||
|
||
async function main() {
|
||
let esbuild;
|
||
try {
|
||
esbuild = require('esbuild');
|
||
} catch (error) {
|
||
console.error('未找到 esbuild,请先执行 npm install。');
|
||
process.exitCode = 1;
|
||
return;
|
||
}
|
||
|
||
const projectRoot = path.resolve(__dirname, '..');
|
||
const entry = path.join(projectRoot, 'src', 'runtime', 'index.js');
|
||
const outFile = path.join(projectRoot, 'dist', 'script.js');
|
||
|
||
if (!fs.existsSync(entry)) {
|
||
console.error(`运行时入口不存在:${path.relative(projectRoot, entry)}`);
|
||
process.exitCode = 1;
|
||
return;
|
||
}
|
||
|
||
ensureDir(path.dirname(outFile));
|
||
|
||
try {
|
||
const result = await esbuild.build({
|
||
entryPoints: [entry],
|
||
outfile: outFile,
|
||
bundle: true,
|
||
platform: 'browser',
|
||
format: 'iife',
|
||
target: ['es2018'],
|
||
sourcemap: false,
|
||
minify: true,
|
||
legalComments: 'none',
|
||
metafile: true,
|
||
logLevel: 'info',
|
||
});
|
||
|
||
const outputs =
|
||
result && result.metafile && result.metafile.outputs ? result.metafile.outputs : null;
|
||
const outKey = outputs ? Object.keys(outputs).find((k) => k.endsWith('dist/script.js')) : '';
|
||
const bytes = outKey && outputs && outputs[outKey] ? outputs[outKey].bytes : 0;
|
||
if (bytes) {
|
||
console.log(`✅ runtime bundle 完成:dist/script.js (${bytes} bytes)`);
|
||
} else {
|
||
console.log('✅ runtime bundle 完成:dist/script.js');
|
||
}
|
||
} catch (error) {
|
||
console.error(
|
||
'❌ runtime bundle 失败(禁止回退旧产物):',
|
||
error && error.message ? error.message : error
|
||
);
|
||
process.exitCode = 1;
|
||
}
|
||
}
|
||
|
||
main();
|