Skip to content

Commit

Permalink
feat: 🎸 add new --analyze CLI flags for build task
Browse files Browse the repository at this point in the history
  • Loading branch information
mjancarik committed Nov 8, 2024
1 parent d77d668 commit 16e9ec4
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 2 deletions.
2 changes: 2 additions & 0 deletions packages/cli/bin/merkur.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const hasRunDevServerOption = new Option('--hasRunDevServer', 'Flag for starting
const hasRunWidgetServerOption = new Option('--hasRunWidgetServer', 'Flag for starting widget server');
const inspectOption = new Option('--inspect', 'Debugging widget server');
const verboseOption = new Option('--verbose', 'Verbose mode which show debug information.');
const analyzeOption = new Option('--analyze', 'Analyze bundle.');

program
.name('merkur')
Expand Down Expand Up @@ -75,6 +76,7 @@ program
.addOption(projectFolderOption)
.addOption(buildFolderOption)
.addOption(staticFolderOption)
.addOption(analyzeOption)
.addOption(verboseOption)
.action(async (options, cmd) => {
const args = {
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/CLIConfig.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export async function createCLIConfig({ args, command } = {}) {
hasRunDevServer: args?.hasRunDevServer ?? false,
hasRunWidgetServer: args?.hasRunWidgetServer ?? false,
inspect: args.inspect ?? false,
analyze: args.analyze ?? false,
verbose: args.verbose ?? false,
};
}
Expand Down
5 changes: 4 additions & 1 deletion packages/cli/src/buildConfig.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import path from 'node:path';
import manifestPlugin from 'esbuild-plugin-manifest';

import { EMITTER_EVENTS, emitter, RESULT_KEY } from './emitter.mjs';
import { aliasPlugin } from './plugins/aliasPlugin.mjs';
import { memoryStaticPlugin } from './plugins/memoryStaticPlugin.mjs';
import { metaPlugin } from './plugins/metaPlugin.mjs';
import { excludeVendorsFromSourceMapPlugin } from './plugins/excludeVendorsFromSourceMapPlugin.mjs';
Expand All @@ -15,7 +16,7 @@ export async function createBuildConfig({
cliConfig,
context,
}) {
const { isServer, writeToDisk, sourcemap } = config;
const { isServer, writeToDisk, sourcemap, analyze } = config;
const { isProduction, outFile, staticFolder, projectFolder } = cliConfig;

const entries = await getEntries({ merkurConfig, cliConfig });
Expand All @@ -31,6 +32,7 @@ export async function createBuildConfig({
write: writeToDisk,
entryNames: isServer || !isProduction ? 'widget' : 'widget.[hash]',
format: isServer ? 'cjs' : 'iife',
metafile: analyze,
mainFields: isServer ? ['module', 'main'] : ['browser', 'module', 'main'],

//@TODO map right versions
Expand Down Expand Up @@ -62,6 +64,7 @@ export async function createBuildConfig({
}, {});
},
}),
aliasPlugin,
!writeToDisk && memoryStaticPlugin,
sourcemap && excludeVendorsFromSourceMapPlugin,
metaPlugin,
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/merkurConfig.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ emitter.on(
build: {
platform: 'node',
write: true,
metafile: false,
},
},
es13: {
Expand Down
21 changes: 20 additions & 1 deletion packages/cli/src/runTask.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import fs from 'node:fs/promises';

import esbuild from 'esbuild';
import { createLogger } from './logger.mjs';

export async function runTask({ cliConfig, build }) {
export async function runTask({ cliConfig, build, config }) {
const logger = createLogger(undefined, cliConfig);
const { watch } = cliConfig;

//es6 === es2015, es9 === es2018, es11 === es2020 es13 ===es2022
Expand All @@ -9,6 +13,21 @@ export async function runTask({ cliConfig, build }) {
? esbuild.context(build)
: esbuild.build(build));

if (config.analyze && result.metafile) {
logger.log(
await esbuild.analyzeMetafile(result.metafile, {
verbose: cliConfig.verbose,
}),
);

if (build.outdir) {
await fs.writeFile(
`${build.outdir}/${build.entryNames ?? config.name}.meta.json`,
JSON.stringify(result.metafile),
);
}
}

if (watch) {
await result.watch();
}
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/taskConfig.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export async function createTaskConfig({
isServer: definition?.build?.platform === 'node',
writeToDisk: definition?.build?.write ?? cliConfig.writeToDisk,
sourcemap: definition?.build?.sourcemap ?? cliConfig.sourcemap,
analyze: definition?.build?.metafile ?? cliConfig.analyze,
...definition.config,
},
definition,
Expand Down

0 comments on commit 16e9ec4

Please sign in to comment.