From 2e1025f2de44d7c576702596e950de6e367cfd02 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Thu, 30 Jul 2020 16:22:03 +0200 Subject: [PATCH] fix(webpack): avoid grouping with default name (#7808) [release] --- packages/config/src/config/build.js | 8 ++---- .../test/__snapshots__/options.test.js.snap | 8 ++---- .../config/__snapshots__/index.test.js.snap | 16 +++--------- packages/webpack/src/config/client.js | 25 ++++++++----------- test/dev/modern.client.test.js | 8 +++--- test/dev/modern.server.test.js | 8 +++--- test/dev/modern.spa.test.js | 12 ++++----- test/dev/spa.test.js | 2 +- .../fixtures/shared-chunk/components/lazy.vue | 8 ++++++ .../shared-chunk/components/shared-vendor.vue | 12 +-------- test/fixtures/shared-chunk/nuxt.config.js | 3 +-- 11 files changed, 43 insertions(+), 67 deletions(-) diff --git a/packages/config/src/config/build.js b/packages/config/src/config/build.js index 94170a3d02..1a2e63ec27 100644 --- a/packages/config/src/config/build.js +++ b/packages/config/src/config/build.js @@ -62,12 +62,8 @@ export default () => ({ minimizer: undefined, splitChunks: { chunks: 'all', - name: undefined, - cacheGroups: { - default: { - name: undefined - } - } + automaticNameDelimiter: '/', + cacheGroups: {} } }, splitChunks: { diff --git a/packages/config/test/__snapshots__/options.test.js.snap b/packages/config/test/__snapshots__/options.test.js.snap index 3acdfbecb5..d3861ba253 100644 --- a/packages/config/test/__snapshots__/options.test.js.snap +++ b/packages/config/test/__snapshots__/options.test.js.snap @@ -113,13 +113,9 @@ Object { "minimizer": undefined, "runtimeChunk": "single", "splitChunks": Object { - "cacheGroups": Object { - "default": Object { - "name": undefined, - }, - }, + "automaticNameDelimiter": "/", + "cacheGroups": Object {}, "chunks": "all", - "name": undefined, }, }, "optimizeCSS": false, diff --git a/packages/config/test/config/__snapshots__/index.test.js.snap b/packages/config/test/config/__snapshots__/index.test.js.snap index 317cdb2fd1..a37a2ba91c 100644 --- a/packages/config/test/config/__snapshots__/index.test.js.snap +++ b/packages/config/test/config/__snapshots__/index.test.js.snap @@ -89,13 +89,9 @@ Object { "minimizer": undefined, "runtimeChunk": "single", "splitChunks": Object { - "cacheGroups": Object { - "default": Object { - "name": undefined, - }, - }, + "automaticNameDelimiter": "/", + "cacheGroups": Object {}, "chunks": "all", - "name": undefined, }, }, "optimizeCSS": undefined, @@ -469,13 +465,9 @@ Object { "minimizer": undefined, "runtimeChunk": "single", "splitChunks": Object { - "cacheGroups": Object { - "default": Object { - "name": undefined, - }, - }, + "automaticNameDelimiter": "/", + "cacheGroups": Object {}, "chunks": "all", - "name": undefined, }, }, "optimizeCSS": undefined, diff --git a/packages/webpack/src/config/client.js b/packages/webpack/src/config/client.js index 58745992d7..6e964ee226 100644 --- a/packages/webpack/src/config/client.js +++ b/packages/webpack/src/config/client.js @@ -66,14 +66,14 @@ export default class WebpackClientConfig extends WebpackBaseConfig { cacheGroups.commons = { test: /node_modules[\\/](vue|vue-loader|vue-router|vuex|vue-meta|core-js|@babel\/runtime|axios|webpack|setimmediate|timers-browserify|process|regenerator-runtime|cookie|js-cookie|is-buffer|dotprop|nuxt\.js)[\\/]/, chunks: 'all', - priority: 10, - name: true, - automaticNameDelimiter: '/' + name: 'node_modules/commons', + priority: 10 } } - if (!this.dev && cacheGroups.default && cacheGroups.default.name === undefined) { - cacheGroups.default.name = (_module, chunks) => { + if (!this.dev && splitChunks.name === undefined) { + const nameMap = { default: 'commons', vendors: 'node_modules' } + splitChunks.name = (_module, chunks, cacheGroup) => { // Map chunks to names const names = chunks .map(c => c.name || '') @@ -85,15 +85,9 @@ export default class WebpackClientConfig extends WebpackBaseConfig { .filter(Boolean) .sort() - // Fixes https://github.com/nuxt/nuxt.js/issues/7665 - // TODO: We need a reproduction for this case (test/fixtures/shared-chunk) - if (!names.length) { - return 'commons/default' - } - - // Single chunk is not common - if (names.length === 1) { - return names[0] + // Fallback to webpack chunk name or generated cache group key + if (names.length < 2) { + return chunks[0].name } // Use compact name for concatinated modules @@ -101,7 +95,8 @@ export default class WebpackClientConfig extends WebpackBaseConfig { if (compactName.length > 32) { compactName = hash(compactName) } - return 'commons/' + compactName + const prefix = nameMap[cacheGroup || 'default'] || cacheGroup + return prefix + '/' + compactName } } diff --git a/test/dev/modern.client.test.js b/test/dev/modern.client.test.js index 88f531426f..2c83871017 100644 --- a/test/dev/modern.client.test.js +++ b/test/dev/modern.client.test.js @@ -16,26 +16,26 @@ describe('modern client mode (SSR)', () => { test('should contain nomodule legacy resources', async () => { const { body: response } = await rp(url('/')) expect(response).toContain('script nomodule crossorigin="use-credentials" src="/_nuxt/app.js') - expect(response).toContain('script nomodule crossorigin="use-credentials" src="/_nuxt/commons/app.js') + expect(response).toContain('script nomodule crossorigin="use-credentials" src="/_nuxt/node_modules/commons.js') }) test('should contain module modern resources', async () => { const { body: response } = await rp(url('/')) expect(response).toContain(' diff --git a/test/fixtures/shared-chunk/components/shared-vendor.vue b/test/fixtures/shared-chunk/components/shared-vendor.vue index 37a84bc925..6449431cbc 100644 --- a/test/fixtures/shared-chunk/components/shared-vendor.vue +++ b/test/fixtures/shared-chunk/components/shared-vendor.vue @@ -5,15 +5,5 @@ diff --git a/test/fixtures/shared-chunk/nuxt.config.js b/test/fixtures/shared-chunk/nuxt.config.js index 3c6e6c4a91..140850c613 100644 --- a/test/fixtures/shared-chunk/nuxt.config.js +++ b/test/fixtures/shared-chunk/nuxt.config.js @@ -1,4 +1,3 @@ export default { - components: true, - modern: true + components: true }