Skip to content

Commit eb9e1b7

Browse files
wagnermacielvikerman
authored andcommitted
fix(builder): store index.html as index.original.html when prerendering '/' (#1383)
and overwrite index.html in output folder with prerendered content.
1 parent ac1a423 commit eb9e1b7

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

modules/builders/src/prerender/index.spec.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,11 @@ describe('Prerender Builder', () => {
211211
]);
212212
});
213213

214-
it('should write to "index/index.html" for route "/"', async () => {
214+
it('should save index.html as index.original.html when caching route "/"', async () => {
215215
await PrerenderModule._renderUniversal(options, context, browserResult, serverResult);
216-
expect(mkdirSyncSpy.calls.allArgs()).toEqual([
217-
['dist/browser/index', { recursive: true }],
218-
]);
219216
expect(writeFileSyncSpy.calls.allArgs()).toEqual([
220-
['dist/browser/index/index.html', RENDERED_HTML],
217+
['dist/browser/index.original.html', INITIAL_HTML],
218+
['dist/browser/index.html', RENDERED_HTML],
221219
]);
222220
});
223221

@@ -234,6 +232,7 @@ describe('Prerender Builder', () => {
234232
mkdirSyncSpy.and.callFake(() => {
235233
throw new Error('Test mkdirSync error.');
236234
});
235+
spyOn(context.logger, 'error');
237236
await expectAsync(
238237
PrerenderModule._renderUniversal(
239238
options,
@@ -243,7 +242,7 @@ describe('Prerender Builder', () => {
243242
)
244243
).not.toBeRejected();
245244
expect(mkdirSyncSpy).toHaveBeenCalled();
246-
expect(writeFileSyncSpy).not.toHaveBeenCalled();
245+
expect(context.logger.error).toHaveBeenCalled();
247246
});
248247
});
249248

modules/builders/src/prerender/index.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,15 @@ export async function _renderUniversal(
5555
};
5656
const html = await renderModuleFn(AppServerModuleDef, renderOpts);
5757

58-
const outputFolderName = route === '/' ? 'index' : route;
59-
const outputFolderPath = path.join(outputPath, outputFolderName);
58+
const outputFolderPath = path.join(outputPath, route);
6059
const outputIndexPath = path.join(outputFolderPath, 'index.html');
6160

61+
// This case happens when we are prerendering "/".
62+
if (browserIndexOutputPath === outputIndexPath) {
63+
const browserIndexOutputPathOriginal = path.join(outputPath, 'index.original.html');
64+
fs.writeFileSync(browserIndexOutputPathOriginal, indexHtml);
65+
}
66+
6267
// There will never conflicting output folders
6368
// because items in options.routes must be unique.
6469
try {

0 commit comments

Comments
 (0)