Skip to content

Commit 140d123

Browse files
authored
feat(gatsby): decouple html activities (#28648)
1 parent 11dced2 commit 140d123

File tree

3 files changed

+39
-21
lines changed

3 files changed

+39
-21
lines changed

packages/gatsby/src/commands/build-html.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export const buildRenderer = async (
8888
return doBuildRenderer(program, config, stage)
8989
}
9090

91-
const deleteRenderer = async (rendererPath: string): Promise<void> => {
91+
export const deleteRenderer = async (rendererPath: string): Promise<void> => {
9292
try {
9393
await fs.remove(rendererPath)
9494
await fs.remove(`${rendererPath}.map`)
@@ -143,7 +143,7 @@ class BuildHTMLError extends Error {
143143
}
144144
}
145145

146-
const doBuildPages = async (
146+
export const doBuildPages = async (
147147
rendererPath: string,
148148
pagePaths: Array<string>,
149149
activity: IActivity,
@@ -166,6 +166,7 @@ const doBuildPages = async (
166166
}
167167
}
168168

169+
// TODO remove in v4 - this could be a "public" api
169170
export const buildHTML = async ({
170171
program,
171172
stage,
@@ -181,7 +182,5 @@ export const buildHTML = async ({
181182
}): Promise<void> => {
182183
const rendererPath = await buildRenderer(program, stage, activity.span)
183184
await doBuildPages(rendererPath, pagePaths, activity, workerPool)
184-
if (stage !== `develop-html`) {
185-
await deleteRenderer(rendererPath)
186-
}
185+
await deleteRenderer(rendererPath)
187186
}

packages/gatsby/src/commands/build.ts

+26-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import signalExit from "signal-exit"
44
import fs from "fs-extra"
55
import telemetry from "gatsby-telemetry"
66

7-
import { buildHTML } from "./build-html"
7+
import { doBuildPages, buildRenderer, deleteRenderer } from "./build-html"
88
import { buildProductionBundle } from "./build-javascript"
99
import { bootstrap } from "../bootstrap"
1010
import apiRunnerNode from "../utils/api-runner-node"
@@ -231,6 +231,20 @@ module.exports = async function build(program: IBuildArgs): Promise<void> {
231231
}
232232
}
233233

234+
const buildSSRBundleActivityProgress = report.activityTimer(
235+
`Building HTML renderer`,
236+
{ parentSpan: buildSpan }
237+
)
238+
buildSSRBundleActivityProgress.start()
239+
let pageRenderer: string
240+
try {
241+
pageRenderer = await buildRenderer(program, Stage.BuildHTML, buildSpan)
242+
} catch (err) {
243+
buildActivityTimer.panic(structureWebpackErrors(Stage.BuildHTML, err))
244+
} finally {
245+
buildSSRBundleActivityProgress.end()
246+
}
247+
234248
const buildHTMLActivityProgress = report.createProgress(
235249
`Building static HTML for pages`,
236250
pagePaths.length,
@@ -241,13 +255,12 @@ module.exports = async function build(program: IBuildArgs): Promise<void> {
241255
)
242256
buildHTMLActivityProgress.start()
243257
try {
244-
await buildHTML({
245-
program,
246-
stage: Stage.BuildHTML,
258+
await doBuildPages(
259+
pageRenderer,
247260
pagePaths,
248-
activity: buildHTMLActivityProgress,
249-
workerPool,
250-
})
261+
buildHTMLActivityProgress,
262+
workerPool
263+
)
251264
} catch (err) {
252265
let id = `95313` // TODO: verify error IDs exist
253266
const context = {
@@ -271,6 +284,12 @@ module.exports = async function build(program: IBuildArgs): Promise<void> {
271284
}
272285
buildHTMLActivityProgress.end()
273286

287+
try {
288+
await deleteRenderer(pageRenderer)
289+
} catch (err) {
290+
// pass through
291+
}
292+
274293
let deletedPageKeys: Array<string> = []
275294
if (process.env.GATSBY_EXPERIMENTAL_PAGE_BUILD_ON_DATA_CHANGES) {
276295
const deletePageDataActivityTimer = report.activityTimer(

packages/gatsby/src/utils/start-server.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,15 @@ module.exports = {
113113

114114
// Remove the following when merging GATSBY_EXPERIMENTAL_DEV_SSR
115115
const directoryPath = withBasePath(directory)
116-
const { buildHTML } = require(`../commands/build-html`)
116+
const { buildRenderer, doBuildPages } = require(`../commands/build-html`)
117117
const createIndexHtml = async (activity: ActivityTracker): Promise<void> => {
118118
try {
119-
await buildHTML({
119+
const rendererPath = await buildRenderer(
120120
program,
121-
stage: Stage.DevelopHTML,
122-
pagePaths: [`/`],
123-
workerPool,
124-
activity,
125-
})
121+
Stage.DevelopHTML,
122+
activity.span
123+
)
124+
await doBuildPages(rendererPath, [`/`], activity, workerPool)
126125
} catch (err) {
127126
if (err.name !== `WebpackError`) {
128127
report.panic(err)
@@ -139,9 +138,10 @@ module.exports = {
139138
}
140139
const indexHTMLActivity = report.phantomActivity(`building index.html`, {})
141140

141+
let pageRenderer: string
142142
if (process.env.GATSBY_EXPERIMENTAL_DEV_SSR) {
143143
const { buildRenderer } = require(`../commands/build-html`)
144-
await buildRenderer(program, Stage.DevelopHTML)
144+
pageRenderer = await buildRenderer(program, Stage.DevelopHTML)
145145
const { initDevWorkerPool } = require(`./dev-ssr/render-dev-html`)
146146
initDevWorkerPool()
147147
} else {
@@ -495,7 +495,7 @@ module.exports = {
495495
// Let renderDevHTML figure it out.
496496
page: undefined,
497497
store,
498-
htmlComponentRendererPath: `${program.directory}/public/render-page.js`,
498+
htmlComponentRendererPath: pageRenderer,
499499
directory: program.directory,
500500
})
501501
const status = process.env.GATSBY_EXPERIMENTAL_DEV_SSR ? 404 : 200

0 commit comments

Comments
 (0)