lowcode-engine/modules/code-generator/scripts/build-standalone-worker.js

108 lines
2.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* eslint-disable no-console */
/* eslint-disable @typescript-eslint/no-require-imports */
const esbuild = require('esbuild');
const { spawnSync } = require('child_process');
const ignorePlugin = require('esbuild-plugin-ignore');
const fs = require('fs');
const path = require('path');
const enableAnalyze = process.env.ANALYZE === 'true';
const buildConfig = {
entryPoints: ['src/standalone-worker.ts'],
outfile: 'dist/standalone-worker.js',
metafile: enableAnalyze,
bundle: true,
target: ['chrome69'],
format: 'iife',
sourcemap: true,
sourcesContent: true,
plugins: [
ignorePlugin([
{
resourceRegExp: /^fs$/,
contextRegExp: /./,
},
// @alilc/lowcode-types 中误依赖了 react这里忽略下
{
resourceRegExp: /^react$/,
contextRegExp: /./,
},
{
resourceRegExp: /setter-config/,
contextRegExp: /lowcode-types|..[\\/]types/,
},
]),
],
define: {
process: JSON.stringify({
env: {
NODE_ENV: 'production',
STANDALONE: 'true',
},
}),
},
treeShaking: true,
};
// 执行脚本
(async () => {
try {
console.log('building...');
const result = await esbuild.build({
...buildConfig,
minify: false,
minifyWhitespace: false,
minifyIdentifiers: false,
minifySyntax: false,
legalComments: 'external',
});
if (result.errors.length > 0) {
throw result.errors;
}
if (result.warnings.length > 0) {
result.warnings.forEach((warnings) => {
console.warn(warnings);
});
}
if (enableAnalyze) {
const metaFile = buildConfig.outfile.replace(/\.js/, '.meta.json');
const statsFile = buildConfig.outfile.replace(/\.js/, '.stats.html');
fs.writeFileSync(metaFile, JSON.stringify(result.metafile || {}), { encoding: 'utf-8' });
spawnSync('npx', ['esbuild-visualizer', '--metadata', metaFile, '--filename', statsFile], {
shell: true,
stdio: 'inherit',
});
spawnSync('open', [statsFile], {
shell: true,
stdio: 'inherit',
});
return;
}
const outFileContent = fs.readFileSync(buildConfig.outfile, 'utf-8');
console.log('minifying...');
const minifiedOutFile = buildConfig.outfile.replace(/\.js$/, '.min.js');
const minifiedResult = esbuild.transformSync(outFileContent, {
minify: true,
sourcemap: true,
sourcesContent: true,
sourcefile: path.basename(buildConfig.outfile),
});
fs.writeFileSync(minifiedOutFile, minifiedResult.code, { encoding: 'utf-8' });
fs.writeFileSync(`${minifiedOutFile}.map`, minifiedResult.map, { encoding: 'utf-8' });
minifiedResult.warnings.forEach((warnings) => {
console.log(warnings);
});
console.log('done');
} catch (e) {
console.error(e);
process.exit(1);
}
})();