From 6337942d4a27c802819d58e93aa64a3cbd7a3383 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 17 May 2021 08:49:30 +0530 Subject: [PATCH 1/3] feat: enable `compress` by default --- lib/utils/normalizeOptions.js | 4 ++ test/server/compress-option.test.js | 11 +----- .../normalizeOptions.test.js.snap.webpack5 | 37 +++++++++++++++++++ 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/lib/utils/normalizeOptions.js b/lib/utils/normalizeOptions.js index 85983234b2..d23509378c 100644 --- a/lib/utils/normalizeOptions.js +++ b/lib/utils/normalizeOptions.js @@ -123,6 +123,10 @@ function normalizeOptions(compiler, options) { if (typeof options.setupExitSignals === 'undefined') { options.setupExitSignals = true; } + + if (typeof options.compress === 'undefined') { + options.compress = true; + } } module.exports = normalizeOptions; diff --git a/test/server/compress-option.test.js b/test/server/compress-option.test.js index cfcd93947c..59a8e0a7d9 100644 --- a/test/server/compress-option.test.js +++ b/test/server/compress-option.test.js @@ -14,7 +14,7 @@ describe('compress option', () => { let server; let req; - describe('not specify', () => { + describe('enabled by default when not specified', () => { beforeAll((done) => { server = testServer.start(config, { port }, done); req = request(server.app); @@ -23,14 +23,7 @@ describe('compress option', () => { afterAll(testServer.close); it('request to bundle file', (done) => { - req - .get('/main.js') - .expect((res) => { - if (res.header['content-encoding']) { - throw new Error('Expected `content-encoding` header is undefined.'); - } - }) - .expect(200, done); + req.get('/main.js').expect('Content-Encoding', 'gzip').expect(200, done); }); }); diff --git a/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack5 b/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack5 index 76bf62a5b5..41ed9a2d6d 100644 --- a/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack5 +++ b/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack5 @@ -7,6 +7,7 @@ Object { "overlay": true, "transport": "/path/to/custom/client/", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -42,6 +43,7 @@ Object { "overlay": true, "port": 9000, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -76,6 +78,7 @@ Object { "overlay": true, "path": "/custom/path/", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -110,6 +113,7 @@ Object { "overlay": true, "path": "custom/path", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -144,6 +148,7 @@ Object { "overlay": true, "transport": "sockjs", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -178,6 +183,7 @@ Object { "overlay": true, "transport": "ws", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -212,6 +218,7 @@ Object { "overlay": true, "transport": "ws", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -245,6 +252,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object { "serverSideRender": true, }, @@ -280,6 +288,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": false, "hot": true, @@ -313,6 +322,7 @@ Object { "hotEntry": false, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": false, @@ -346,6 +356,7 @@ Object { "hotEntry": "only", "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": "only", @@ -379,6 +390,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -412,6 +424,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -445,6 +458,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -478,6 +492,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -513,6 +528,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -546,6 +562,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -581,6 +598,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -616,6 +634,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -651,6 +670,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -684,6 +704,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -728,6 +749,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -772,6 +794,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -816,6 +839,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -849,6 +873,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -870,6 +895,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -903,6 +929,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -936,6 +963,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -969,6 +997,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1003,6 +1032,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1036,6 +1066,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1067,6 +1098,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1100,6 +1132,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1135,6 +1168,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1168,6 +1202,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1201,6 +1236,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1234,6 +1270,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, From c0ad1b78d9757fd6d8bb41ac078a274bed191c20 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 17 May 2021 09:14:40 +0530 Subject: [PATCH 2/3] test: update snapshot --- .../normalizeOptions.test.js.snap.webpack4 | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack4 b/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack4 index 76bf62a5b5..41ed9a2d6d 100644 --- a/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack4 +++ b/test/server/utils/__snapshots__/normalizeOptions.test.js.snap.webpack4 @@ -7,6 +7,7 @@ Object { "overlay": true, "transport": "/path/to/custom/client/", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -42,6 +43,7 @@ Object { "overlay": true, "port": 9000, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -76,6 +78,7 @@ Object { "overlay": true, "path": "/custom/path/", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -110,6 +113,7 @@ Object { "overlay": true, "path": "custom/path", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -144,6 +148,7 @@ Object { "overlay": true, "transport": "sockjs", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -178,6 +183,7 @@ Object { "overlay": true, "transport": "ws", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -212,6 +218,7 @@ Object { "overlay": true, "transport": "ws", }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -245,6 +252,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object { "serverSideRender": true, }, @@ -280,6 +288,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": false, "hot": true, @@ -313,6 +322,7 @@ Object { "hotEntry": false, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": false, @@ -346,6 +356,7 @@ Object { "hotEntry": "only", "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": "only", @@ -379,6 +390,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -412,6 +424,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -445,6 +458,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -478,6 +492,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -513,6 +528,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -546,6 +562,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -581,6 +598,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -616,6 +634,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -651,6 +670,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -684,6 +704,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -728,6 +749,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -772,6 +794,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -816,6 +839,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -849,6 +873,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -870,6 +895,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -903,6 +929,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -936,6 +963,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -969,6 +997,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1003,6 +1032,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1036,6 +1066,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1067,6 +1098,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1100,6 +1132,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1135,6 +1168,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1168,6 +1202,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1201,6 +1236,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, @@ -1234,6 +1270,7 @@ Object { "hotEntry": true, "overlay": true, }, + "compress": true, "devMiddleware": Object {}, "firewall": true, "hot": true, From 50f200a7132e3b33a846e0dce7d9838e84247ff0 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 17 May 2021 18:00:29 +0530 Subject: [PATCH 3/3] docs: update --- examples/cli/compression/README.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/examples/cli/compression/README.md b/examples/cli/compression/README.md index 13f6d08973..4f448400d1 100644 --- a/examples/cli/compression/README.md +++ b/examples/cli/compression/README.md @@ -3,19 +3,38 @@ Website gzip compression makes it possible to reduce the file size of a file to roughly 30% of its original size before the files are sent to the browser. +It is enabled by default. + +## `--compress` + To run this example, run this command in your console or terminal: ```console npm run webpack-dev-server -- --open --compress ``` -## What should happen +### What should happen 1. The script should open `http://localhost:8080/`. 2. Files being sent to the browser from the `webpack` bundle should be gzipped. 3. Open the console in your browser's devtools and select the _Network_ tab. 4. Find `bundle.js`. The response headers should contain `Content-Encoding: gzip`. +## `--no-compress` + +To run this example, run this command in your console or terminal: + +```console +npm run webpack-dev-server -- --open --no-compress +``` + +### What should happen + +1. The script should open `http://localhost:8080/`. +2. Files being sent to the browser from the `webpack` bundle should be gzipped. +3. Open the console in your browser's devtools and select the _Network_ tab. +4. Find `bundle.js`. The response headers should not contain `Content-Encoding: gzip`. + ## Notes Some browsers, such as Chrome, won't show the `Content-Encoding: gzip` within