From c032a03c5b19735b9f4ab48c2181afb351dffa35 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Mon, 1 Aug 2022 13:50:40 -0500 Subject: [PATCH 01/10] feat: introduce __viteFile --- .../src/node/plugins/importAnalysisBuild.ts | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index f392cfda538584..eec9b89b7f8ab8 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -390,6 +390,16 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { const s = new MagicString(code) const rewroteMarkerStartPos = new Set() // position of the leading double quote + const fileDeps: string[] = []; + + const addFileDep = (url: string): number => { + if (!fileDeps.includes(url)) { + fileDeps.push(url); + } + + return fileDeps.indexOf(url); + }; + if (imports.length) { for (let index = 0; index < imports.length; index++) { // To handle escape sequences in specifier strings, the .n field will be provided where possible. @@ -407,7 +417,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { if (rawUrl[0] === `"` && rawUrl[rawUrl.length - 1] === `"`) url = rawUrl.slice(1, -1) } - const deps: Set = new Set() + const deps: Set = new Set() let hasRemovedPureCssChunk = false if (url) { @@ -420,9 +430,9 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { analyzed.add(filename) const chunk = bundle[filename] as OutputChunk | undefined if (chunk) { - deps.add(chunk.fileName) + deps.add(addFileDep(chunk.fileName)) chunk.viteMetadata.importedCss.forEach((file) => { - deps.add(file) + deps.add(addFileDep(file)) }) chunk.imports.forEach(addDeps) } else { @@ -432,7 +442,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { if (chunk) { if (chunk.viteMetadata.importedCss.size) { chunk.viteMetadata.importedCss.forEach((file) => { - deps.add(file) + deps.add(addFileDep(file)) }) hasRemovedPureCssChunk = true } @@ -466,15 +476,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { deps.size > 1 || // main chunk is removed (hasRemovedPureCssChunk && deps.size > 0) - ? `[${[...deps] - .map((d) => - JSON.stringify( - relativePreloadUrls - ? path.relative(path.dirname(file), d) - : d - ) - ) - .join(',')}]` + ? `__viteFile([${[...deps].join(',')}])` : `[]`, { contentOnly: true } ) @@ -483,6 +485,13 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } } + s.append(`function __viteFile (indexes) { + const fileDeps = ${JSON.stringify(fileDeps.map((fileDep) => relativePreloadUrls + ? path.relative(path.dirname(file), fileDep) + : fileDep))}; + return indexes.map((index) => fileDeps[index]); + }`); + // there may still be markers due to inlined dynamic imports, remove // all the markers regardless let markerStartPos = code.indexOf(preloadMarkerWithQuote) From de471b1c88c8d66f86cb37e69298df830ca54b05 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Mon, 1 Aug 2022 13:55:07 -0500 Subject: [PATCH 02/10] style: apply prettier --- .../src/node/plugins/importAnalysisBuild.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index eec9b89b7f8ab8..864bd8de6f645e 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -390,15 +390,15 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { const s = new MagicString(code) const rewroteMarkerStartPos = new Set() // position of the leading double quote - const fileDeps: string[] = []; + const fileDeps: string[] = [] const addFileDep = (url: string): number => { if (!fileDeps.includes(url)) { - fileDeps.push(url); + fileDeps.push(url) } - return fileDeps.indexOf(url); - }; + return fileDeps.indexOf(url) + } if (imports.length) { for (let index = 0; index < imports.length; index++) { @@ -486,11 +486,15 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } s.append(`function __viteFile (indexes) { - const fileDeps = ${JSON.stringify(fileDeps.map((fileDep) => relativePreloadUrls - ? path.relative(path.dirname(file), fileDep) - : fileDep))}; + const fileDeps = ${JSON.stringify( + fileDeps.map((fileDep) => + relativePreloadUrls + ? path.relative(path.dirname(file), fileDep) + : fileDep + ) + )}; return indexes.map((index) => fileDeps[index]); - }`); + }`) // there may still be markers due to inlined dynamic imports, remove // all the markers regardless From d1bfe1fd2aab3e36ceae06df28c31db769d592d4 Mon Sep 17 00:00:00 2001 From: bluwy Date: Tue, 2 Aug 2022 15:06:12 +0800 Subject: [PATCH 03/10] refactor: minor perf and style tweaks --- .../src/node/plugins/importAnalysisBuild.ts | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 864bd8de6f645e..d9f9888c71faee 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -391,13 +391,13 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { const rewroteMarkerStartPos = new Set() // position of the leading double quote const fileDeps: string[] = [] - const addFileDep = (url: string): number => { - if (!fileDeps.includes(url)) { - fileDeps.push(url) + const index = fileDeps.indexOf(url) + if (index !== -1) { + return index + } else { + return fileDeps.push(url) - 1 } - - return fileDeps.indexOf(url) } if (imports.length) { @@ -485,16 +485,15 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } } - s.append(`function __viteFile (indexes) { - const fileDeps = ${JSON.stringify( - fileDeps.map((fileDep) => - relativePreloadUrls - ? path.relative(path.dirname(file), fileDep) - : fileDep - ) - )}; - return indexes.map((index) => fileDeps[index]); - }`) + s.append(`\ +function __viteFile(indexes) { + const fileDeps = ${JSON.stringify( + fileDeps.map((fileDep) => + relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep + ) + )} + return indexes.map((index) => fileDeps[index]) +}`) // there may still be markers due to inlined dynamic imports, remove // all the markers regardless From 8932e358b0d17d9e7828ad7507e299a1e7a3f72f Mon Sep 17 00:00:00 2001 From: bluwy Date: Tue, 2 Aug 2022 21:57:36 +0800 Subject: [PATCH 04/10] refactor: shorten variable names --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index d9f9888c71faee..af651957ba0db7 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -487,12 +487,12 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { s.append(`\ function __viteFile(indexes) { - const fileDeps = ${JSON.stringify( + const deps = ${JSON.stringify( fileDeps.map((fileDep) => relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep ) )} - return indexes.map((index) => fileDeps[index]) + return indexes.map((i) => deps[i]) }`) // there may still be markers due to inlined dynamic imports, remove From f2f547aa2cc7c22605111e03d2e9de5758304c59 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Tue, 2 Aug 2022 11:44:18 -0500 Subject: [PATCH 05/10] feat: rename __viteFile to __viteMapDep --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index af651957ba0db7..2c72f3aa6fe534 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -476,7 +476,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { deps.size > 1 || // main chunk is removed (hasRemovedPureCssChunk && deps.size > 0) - ? `__viteFile([${[...deps].join(',')}])` + ? `__viteMapDep([${[...deps].join(',')}])` : `[]`, { contentOnly: true } ) @@ -486,7 +486,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } s.append(`\ -function __viteFile(indexes) { +function __viteMapDep(indexes) { const deps = ${JSON.stringify( fileDeps.map((fileDep) => relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep From 2a0c8e2a8e35cfa4efc6d9cc78de2d0749670453 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Tue, 2 Aug 2022 11:45:58 -0500 Subject: [PATCH 06/10] refactor: hoist deps --- .../vite/src/node/plugins/importAnalysisBuild.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 2c72f3aa6fe534..66bce7492729e0 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -486,13 +486,13 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } s.append(`\ +const __viteFileDeps = ${JSON.stringify( + fileDeps.map((fileDep) => + relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep + ) +)} function __viteMapDep(indexes) { - const deps = ${JSON.stringify( - fileDeps.map((fileDep) => - relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep - ) - )} - return indexes.map((i) => deps[i]) + return __viteFileDeps.map((i) => deps[i]) }`) // there may still be markers due to inlined dynamic imports, remove From e626e02d5bae42d33e694af827eecb467191a1ea Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Tue, 2 Aug 2022 12:40:28 -0500 Subject: [PATCH 07/10] Update packages/vite/src/node/plugins/importAnalysisBuild.ts Co-authored-by: Anthony Fu --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 66bce7492729e0..40d3a8f2f42745 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -492,7 +492,7 @@ const __viteFileDeps = ${JSON.stringify( ) )} function __viteMapDep(indexes) { - return __viteFileDeps.map((i) => deps[i]) + return indexes.map((i) => __viteFileDeps[i]) }`) // there may still be markers due to inlined dynamic imports, remove From 468e8ad02433862b4b30341dc309602b46f8f034 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Wed, 3 Aug 2022 07:54:13 -0500 Subject: [PATCH 08/10] fix: move __viteFileDeps back into __viteMapDep --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 40d3a8f2f42745..ae5c07d17c0a95 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -486,12 +486,12 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } s.append(`\ -const __viteFileDeps = ${JSON.stringify( - fileDeps.map((fileDep) => - relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep - ) -)} function __viteMapDep(indexes) { + const __viteFileDeps = ${JSON.stringify( + fileDeps.map((fileDep) => + relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep + ) + )} return indexes.map((i) => __viteFileDeps[i]) }`) From 83022e40215290356c817fc6f93adbb808301ff6 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Mon, 8 Aug 2022 08:21:07 -0500 Subject: [PATCH 09/10] perf: memoize viteFileDeps initialization --- .../vite/src/node/plugins/importAnalysisBuild.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index ae5c07d17c0a95..641ccccd44b382 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -487,12 +487,14 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { s.append(`\ function __viteMapDep(indexes) { - const __viteFileDeps = ${JSON.stringify( - fileDeps.map((fileDep) => - relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep - ) - )} - return indexes.map((i) => __viteFileDeps[i]) + if (!__viteMapDep.viteFileDeps) { + __viteMapDep.viteFileDeps = ${JSON.stringify( + fileDeps.map((fileDep) => + relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep + ) + )} + } + return indexes.map((i) => __viteMapDep.viteFileDeps[i]) }`) // there may still be markers due to inlined dynamic imports, remove From a71fcf487fdc704c7165958463d66d3718f47e92 Mon Sep 17 00:00:00 2001 From: Gajus Kuizinas Date: Tue, 9 Aug 2022 16:57:47 -0500 Subject: [PATCH 10/10] style: apply prettier --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 641ccccd44b382..2e685f12ea308e 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -490,7 +490,9 @@ function __viteMapDep(indexes) { if (!__viteMapDep.viteFileDeps) { __viteMapDep.viteFileDeps = ${JSON.stringify( fileDeps.map((fileDep) => - relativePreloadUrls ? path.relative(path.dirname(file), fileDep) : fileDep + relativePreloadUrls + ? path.relative(path.dirname(file), fileDep) + : fileDep ) )} }