Skip to content

Commit df48437

Browse files
authored
refactor: Removing unnecessary build outputs (#1499)
* refactor: Removing unnecessary build outputs * docs: Adding changeset * fix: Adding fallback for SW when 200.html not present * test: Correcting SW test * fix: PR comments
1 parent 58fe777 commit df48437

File tree

6 files changed

+27
-18
lines changed

6 files changed

+27
-18
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'preact-cli': patch
3+
---
4+
5+
CLI now only conditionally outputs 200.html & preact_prerender_data.json

packages/cli/lib/lib/webpack/render-html-plugin.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ module.exports = async function (config) {
5555
writeFileSync(template, content);
5656
}
5757

58-
const htmlWebpackConfig = (values) => {
58+
const htmlWebpackConfig = values => {
5959
const { url, title, ...routeData } = values;
6060
// Do not create a folder if the url is for a specific file.
6161
const filename = url.endsWith('.html')
@@ -151,15 +151,20 @@ module.exports = async function (config) {
151151
* And we dont have to cache every single html file.
152152
* Go easy on network usage of clients.
153153
*/
154-
!pages.find((page) => page.url === PREACT_FALLBACK_URL) &&
154+
!pages.find(page => page.url === PREACT_FALLBACK_URL) &&
155+
config.sw &&
155156
pages.push({ url: PREACT_FALLBACK_URL });
156157

157158
const resultPages = pages
158159
.map(htmlWebpackConfig)
159-
.map((conf) => new HtmlWebpackPlugin(conf))
160-
.concat([new HtmlWebpackExcludeAssetsPlugin()])
161-
.concat([...pages.map((page) => new PrerenderDataExtractPlugin(page))]);
162-
return resultPages;
160+
.map(conf => new HtmlWebpackPlugin(conf))
161+
.concat([new HtmlWebpackExcludeAssetsPlugin()]);
162+
163+
return config.prerender
164+
? resultPages.concat([
165+
...pages.map(page => new PrerenderDataExtractPlugin(page)),
166+
])
167+
: resultPages;
163168
};
164169

165170
// Adds a preact_prerender_data in every folder so that the data could be fetched separately.
@@ -171,7 +176,7 @@ class PrerenderDataExtractPlugin {
171176
this.data_ = JSON.stringify(cliData.preRenderData || {});
172177
}
173178
apply(compiler) {
174-
compiler.hooks.emit.tap('PrerenderDataExtractPlugin', (compilation) => {
179+
compiler.hooks.emit.tap('PrerenderDataExtractPlugin', compilation => {
175180
if (this.location_ === `${PREACT_FALLBACK_URL}/`) {
176181
// We dont build prerender data for `200.html`. It can re-use the one for homepage.
177182
return;

packages/cli/sw/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ export function setupRouting() {
2020

2121
setCatchHandler(({ event }) => {
2222
if (isNav(event)) {
23-
return caches.match(getCacheKeyForURL('/200.html'));
23+
return caches.match(
24+
getCacheKeyForURL('/200.html') || getCacheKeyForURL('/index.html')
25+
);
2426
}
2527
return Response.error();
2628
});

packages/cli/tests/build.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function getRegExpFromMarkup(markup) {
4242
function testMatch(src, tar) {
4343
let k, tmp;
4444
let keys = Object.keys(tar);
45-
expect(keys).toHaveLength(Object.keys(src).length);
45+
expect(Object.keys(src)).toHaveLength(keys.length);
4646
for (k in src) {
4747
expect(hasKey(k, keys)).toBeTruthy();
4848
if (!isWithin(src[k], tar[tmp])) return false;

packages/cli/tests/images/build.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ exports.default = exports.full = Object.assign({}, common, {
1616
'bundle.7e56a.css': 901,
1717
'favicon.ico': 15086,
1818
'index.html': 2034,
19-
'200.html': 613,
2019
'manifest.json': 455,
2120
'preact_prerender_data.json': 11,
2221
'push-manifest.json': 812,

packages/cli/tests/service-worker.test.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ async function enableOfflineMode(page, browser) {
99
await sleep(2000); // wait for service worker installation.
1010
await page.setOfflineMode(true);
1111
const targets = await browser.targets();
12-
const serviceWorker = targets.find((t) => t.type() === 'service_worker');
12+
const serviceWorker = targets.find(t => t.type() === 'service_worker');
1313
const serviceWorkerConnection = await serviceWorker.createCDPSession();
1414
await serviceWorkerConnection.send('Network.enable');
1515
await serviceWorkerConnection.send('Network.emulateNetworkConditions', {
@@ -57,7 +57,7 @@ describe('preact service worker tests', () => {
5757
const offlineContent = await page.content();
5858
await page.waitForSelector('h1');
5959
expect(
60-
await page.$$eval('h1', (nodes) => nodes.map((n) => n.innerText))
60+
await page.$$eval('h1', nodes => nodes.map(n => n.innerText))
6161
).toEqual(['Preact App', 'Home']);
6262
expect(offlineContent).not.toEqual(initialContent);
6363
});
@@ -86,13 +86,11 @@ describe('preact service worker tests', () => {
8686
});
8787

8888
it('should respond with 200.html when offline', async () => {
89-
const swText = await fetch('http://localhost:3000/sw-esm.js').then((res) =>
89+
const swText = await fetch('http://localhost:3000/sw-esm.js').then(res =>
9090
res.text()
9191
);
9292
// eslint-disable-next-line no-useless-escape
93-
expect(swText).toContain(
94-
'caches.match((t="/200.html",ce().getCacheKeyForURL(t)))'
95-
);
93+
expect(swText).toContain('caches.match(T("/200.html")||T("/index.html"))');
9694
const page = await browser.newPage();
9795
await page.setCacheEnabled(false);
9896
await page.goto('http://localhost:3000', {
@@ -101,8 +99,8 @@ describe('preact service worker tests', () => {
10199
await enableOfflineMode(page, browser);
102100
await page.reload({ waitUntil: 'networkidle0' });
103101
expect(
104-
await page.$$eval('script[type=__PREACT_CLI_DATA__]', (nodes) =>
105-
nodes.map((n) => n.innerText)
102+
await page.$$eval('script[type=__PREACT_CLI_DATA__]', nodes =>
103+
nodes.map(n => n.innerText)
106104
)
107105
).toEqual(['%7B%22preRenderData%22:%7B%22url%22:%22/200.html%22%7D%7D']);
108106
});

0 commit comments

Comments
 (0)