From dafc9f318e29ab444c12e84564b38b5318a13d78 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Thu, 28 Dec 2023 08:02:04 -0800 Subject: [PATCH] feat: minify js scripts (closes #655) (#657) --- quartz/plugins/emitters/componentResources.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/quartz/plugins/emitters/componentResources.ts b/quartz/plugins/emitters/componentResources.ts index 884db4dd..b51d0919 100644 --- a/quartz/plugins/emitters/componentResources.ts +++ b/quartz/plugins/emitters/componentResources.ts @@ -14,6 +14,7 @@ import { StaticResources } from "../../util/resources" import { QuartzComponent } from "../../components/types" import { googleFontHref, joinStyles } from "../../util/theme" import { Features, transform } from "lightningcss" +import { transform as transpile } from "esbuild" type ComponentResources = { css: string[] @@ -56,9 +57,16 @@ function getComponentResources(ctx: BuildCtx): ComponentResources { } } -function joinScripts(scripts: string[]): string { +async function joinScripts(scripts: string[]): Promise { // wrap with iife to prevent scope collision - return scripts.map((script) => `(function () {${script}})();`).join("\n") + const script = scripts.map((script) => `(function () {${script}})();`).join("\n") + + // minify with esbuild + const res = await transpile(script, { + minify: true, + }) + + return res.code } function addGlobalPageResources( @@ -165,8 +173,11 @@ export const ComponentResources: QuartzEmitterPlugin = (opts?: Partial< addGlobalPageResources(ctx, resources, componentResources) const stylesheet = joinStyles(ctx.cfg.configuration.theme, ...componentResources.css, styles) - const prescript = joinScripts(componentResources.beforeDOMLoaded) - const postscript = joinScripts(componentResources.afterDOMLoaded) + const [prescript, postscript] = await Promise.all([ + joinScripts(componentResources.beforeDOMLoaded), + joinScripts(componentResources.afterDOMLoaded), + ]) + const fps = await Promise.all([ emit({ slug: "index" as FullSlug,