feat: A flag (--save-metafiles) to save esbuild metafiles
- Useful for analysing bundle size
This commit is contained in:
parent
e4ff09ad6a
commit
fe25fe1db1
3 changed files with 31 additions and 1 deletions
|
|
@ -60,6 +60,11 @@ const argv = yargs
|
|||
type: "boolean",
|
||||
description: "Run build command for apps",
|
||||
})
|
||||
.option("save-metafiles", {
|
||||
type: "boolean",
|
||||
description:
|
||||
"Saves esbuild metafiles for built assets. Useful for analyzing bundle size. More info: https://esbuild.github.io/api/#metafile",
|
||||
})
|
||||
.example("node esbuild --apps frappe,erpnext", "Run build only for frappe and erpnext")
|
||||
.example(
|
||||
"node esbuild --files frappe/website.bundle.js,frappe/desk.bundle.js",
|
||||
|
|
@ -401,6 +406,13 @@ async function write_assets_json(metafile) {
|
|||
|
||||
await fs.promises.writeFile(assets_json_path, JSON.stringify(new_assets_json, null, 4));
|
||||
await update_assets_json_in_cache();
|
||||
if (argv["save-metafiles"]) {
|
||||
// use current timestamp in readable formate as a suffix for filename
|
||||
let current_timestamp = new Date().getTime();
|
||||
const metafile_name = `meta-${current_timestamp}.json`;
|
||||
await fs.promises.writeFile(`${metafile_name}`, JSON.stringify(metafile));
|
||||
log(`Saved metafile as ${metafile_name}`);
|
||||
}
|
||||
return {
|
||||
new_assets_json,
|
||||
prev_assets_json,
|
||||
|
|
|
|||
|
|
@ -229,6 +229,7 @@ def bundle(
|
|||
verbose=False,
|
||||
skip_frappe=False,
|
||||
files=None,
|
||||
save_metafiles=False,
|
||||
):
|
||||
"""concat / minify js files"""
|
||||
setup()
|
||||
|
|
@ -248,6 +249,9 @@ def bundle(
|
|||
|
||||
command += " --run-build-command"
|
||||
|
||||
if save_metafiles:
|
||||
command += " --save-metafiles"
|
||||
|
||||
check_node_executable()
|
||||
frappe_app_path = frappe.get_app_path("frappe", "..")
|
||||
frappe.commands.popen(command, cwd=frappe_app_path, env=get_node_env(), raise_err=True)
|
||||
|
|
|
|||
|
|
@ -31,6 +31,12 @@ EXTRA_ARGS_CTX = {"ignore_unknown_options": True, "allow_extra_args": True}
|
|||
@click.option(
|
||||
"--force", is_flag=True, default=False, help="Force build assets instead of downloading available"
|
||||
)
|
||||
@click.option(
|
||||
"--save-metafiles",
|
||||
is_flag=True,
|
||||
default=False,
|
||||
help="Saves esbuild metafiles for built assets. Useful for analyzing bundle size. More info: https://esbuild.github.io/api/#metafile",
|
||||
)
|
||||
def build(
|
||||
app=None,
|
||||
apps=None,
|
||||
|
|
@ -38,6 +44,7 @@ def build(
|
|||
production=False,
|
||||
verbose=False,
|
||||
force=False,
|
||||
save_metafiles=False,
|
||||
):
|
||||
"Compile JS and CSS source files"
|
||||
from frappe.build import bundle, download_frappe_assets
|
||||
|
|
@ -62,7 +69,14 @@ def build(
|
|||
if production:
|
||||
mode = "production"
|
||||
|
||||
bundle(mode, apps=apps, hard_link=hard_link, verbose=verbose, skip_frappe=skip_frappe)
|
||||
bundle(
|
||||
mode,
|
||||
apps=apps,
|
||||
hard_link=hard_link,
|
||||
verbose=verbose,
|
||||
skip_frappe=skip_frappe,
|
||||
save_metafiles=save_metafiles,
|
||||
)
|
||||
|
||||
|
||||
@click.command("watch")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue