From 226891b9b1630c90835d1bc1a239c2ebbb5c9ff1 Mon Sep 17 00:00:00 2001 From: kabirgh <15871468+kabirgh@users.noreply.github.com> Date: Sun, 11 Feb 2024 20:20:44 +0000 Subject: [PATCH] fix(fast rebuild): call only required emitters, don't always copy assets (#845) * fix(fast rebuild): call only required emitters, don't always copy assets * Type function --- quartz/build.ts | 5 +++-- quartz/plugins/emitters/assets.ts | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/quartz/build.ts b/quartz/build.ts index ed166bb..452a2f1 100644 --- a/quartz/build.ts +++ b/quartz/build.ts @@ -203,8 +203,9 @@ async function partialRebuildFromEntrypoint( const emitterGraph = (await emitter.getDependencyGraph?.(ctx, processedFiles, staticResources)) ?? null - // emmiter may not define a dependency graph. nothing to update if so - if (emitterGraph) { + // only update the graph if the emitter plugin uses the changed file + // eg. Assets plugin ignores md files, so we skip updating the graph + if (emitterGraph?.hasNode(fp)) { // merge the new dependencies into the dep graph dependencies[emitter.name]?.updateIncomingEdgesForNode(emitterGraph, fp) } diff --git a/quartz/plugins/emitters/assets.ts b/quartz/plugins/emitters/assets.ts index 379cd5b..036b27d 100644 --- a/quartz/plugins/emitters/assets.ts +++ b/quartz/plugins/emitters/assets.ts @@ -4,6 +4,13 @@ import path from "path" import fs from "fs" import { glob } from "../../util/glob" import DepGraph from "../../depgraph" +import { Argv } from "../../util/ctx" +import { QuartzConfig } from "../../cfg" + +const filesToCopy = async (argv: Argv, cfg: QuartzConfig) => { + // glob all non MD files in content folder and copy it over + return await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns]) +} export const Assets: QuartzEmitterPlugin = () => { return { @@ -15,7 +22,7 @@ export const Assets: QuartzEmitterPlugin = () => { const { argv, cfg } = ctx const graph = new DepGraph() - const fps = await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns]) + const fps = await filesToCopy(argv, cfg) for (const fp of fps) { const ext = path.extname(fp) @@ -30,9 +37,8 @@ export const Assets: QuartzEmitterPlugin = () => { return graph }, async emit({ argv, cfg }, _content, _resources): Promise { - // glob all non MD/MDX/HTML files in content folder and copy it over const assetsPath = argv.output - const fps = await glob("**", argv.directory, ["**/*.md", ...cfg.configuration.ignorePatterns]) + const fps = await filesToCopy(argv, cfg) const res: FilePath[] = [] for (const fp of fps) { const ext = path.extname(fp)