File size: 1,973 Bytes
e1ae2c6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | const path = require('node:path');
const fs = require('node:fs');
const { createLogger, isVerbose, startTimer } = require('../src/generator/utils/logger');
const log = createLogger('bundle');
function ensureDir(dirPath) {
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath, { recursive: true });
}
}
async function main() {
let esbuild;
try {
esbuild = require('esbuild');
} catch (error) {
log.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)) {
log.error('运行时入口不存在', { path: path.relative(projectRoot, entry) });
process.exitCode = 1;
return;
}
ensureDir(path.dirname(outFile));
try {
const elapsedMs = startTimer();
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: 'silent',
});
const ms = elapsedMs();
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;
const meta = { ms };
if (bytes) meta.bytes = bytes;
log.ok('输出 dist/script.js', meta);
} catch (error) {
log.error('构建 dist/script.js 失败', {
message: error && error.message ? error.message : String(error),
});
if (isVerbose() && error && error.stack) {
console.error(error.stack);
}
process.exitCode = 1;
}
}
main();
|