From 365cea12b35913265c172d7d8c11b51587cedbe4 Mon Sep 17 00:00:00 2001 From: pengbo43 Date: Tue, 30 Apr 2024 13:13:21 +0800 Subject: [PATCH 1/7] fix: relaxing reg --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 2c3fdcee0e7e23..47af64ce625cee 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -37,7 +37,10 @@ export const preloadMarker = `__VITE_PRELOAD__` export const preloadBaseMarker = `__VITE_PRELOAD_BASE__` export const preloadHelperId = '\0vite/preload-helper.js' -const preloadMarkerWithQuote = new RegExp(`['"]${preloadMarker}['"]`, 'g') +const preloadMarkerWithQuote = new RegExp( + `['"]${['', ...preloadMarker.split(''), ''].join('(\\\\[\r\n])?')}['"]`, + 'g', +) const dynamicImportPrefixRE = /import\s*\(/ From 68f24d1588989f593775a137cf649f4a629a6c39 Mon Sep 17 00:00:00 2001 From: pengbo43 Date: Tue, 30 Apr 2024 15:04:29 +0800 Subject: [PATCH 2/7] chore: replaceAll preloadMarker before replace runtime --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 47af64ce625cee..2745c6c21783a4 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -38,7 +38,7 @@ export const preloadBaseMarker = `__VITE_PRELOAD_BASE__` export const preloadHelperId = '\0vite/preload-helper.js' const preloadMarkerWithQuote = new RegExp( - `['"]${['', ...preloadMarker.split(''), ''].join('(\\\\[\r\n])?')}['"]`, + `['"]${['', ...preloadMarker.split(''), ''].join('\\\\?(\r\n|\r|\n)?')}['"]`, 'g', ) @@ -321,8 +321,11 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { const chunk = bundle[file] // can't use chunk.dynamicImports.length here since some modules e.g. // dynamic import to constant json may get inlined. - if (chunk.type === 'chunk' && chunk.code.indexOf(preloadMarker) > -1) { - const code = chunk.code + if (chunk.type === 'chunk' && preloadMarkerWithQuote.test(chunk.code)) { + const code = (chunk.code = chunk.code.replaceAll( + preloadMarkerWithQuote, + `"${preloadMarker}"`, + )) let imports!: ImportSpecifier[] try { imports = parseImports(code)[0].filter((i) => i.d > -1) From bcab43cbc001d11da59a17139a0b2ed8f1b3a60f Mon Sep 17 00:00:00 2001 From: pengbo43 Date: Tue, 30 Apr 2024 16:15:01 +0800 Subject: [PATCH 3/7] refactor: use preloadMarker as a varable --- .../vite/src/node/plugins/importAnalysisBuild.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 2745c6c21783a4..f8fabe07593ea7 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -37,10 +37,7 @@ export const preloadMarker = `__VITE_PRELOAD__` export const preloadBaseMarker = `__VITE_PRELOAD_BASE__` export const preloadHelperId = '\0vite/preload-helper.js' -const preloadMarkerWithQuote = new RegExp( - `['"]${['', ...preloadMarker.split(''), ''].join('\\\\?(\r\n|\r|\n)?')}['"]`, - 'g', -) +const preloadMarkerWithQuote = new RegExp(preloadMarker, 'g') const dynamicImportPrefixRE = /import\s*\(/ @@ -263,7 +260,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { str().prependLeft(expStart, `${preloadMethod}(() => `) str().appendRight( expEnd, - `,${isModernFlag}?"${preloadMarker}":void 0${ + `,${isModernFlag}?${preloadMarker}:void 0${ optimizeModulePreloadRelativePaths || customModulePreloadPaths ? ',import.meta.url' : '' @@ -322,10 +319,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { // can't use chunk.dynamicImports.length here since some modules e.g. // dynamic import to constant json may get inlined. if (chunk.type === 'chunk' && preloadMarkerWithQuote.test(chunk.code)) { - const code = (chunk.code = chunk.code.replaceAll( - preloadMarkerWithQuote, - `"${preloadMarker}"`, - )) + const code = chunk.code let imports!: ImportSpecifier[] try { imports = parseImports(code)[0].filter((i) => i.d > -1) From 0f0a1cf75d13d28507f419c3f924d817512bbf8d Mon Sep 17 00:00:00 2001 From: pengbo43 Date: Tue, 30 Apr 2024 16:31:01 +0800 Subject: [PATCH 4/7] fix: preloadMarker end pos --- packages/vite/src/node/plugins/importAnalysisBuild.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index f8fabe07593ea7..08918633c2e36a 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -318,7 +318,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { const chunk = bundle[file] // can't use chunk.dynamicImports.length here since some modules e.g. // dynamic import to constant json may get inlined. - if (chunk.type === 'chunk' && preloadMarkerWithQuote.test(chunk.code)) { + if (chunk.type === 'chunk' && chunk.code.indexOf(preloadMarker) > -1) { const code = chunk.code let imports!: ImportSpecifier[] try { @@ -497,7 +497,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { s.update( markerStartPos, - markerStartPos + preloadMarker.length + 2, + markerStartPos + preloadMarker.length, renderedDeps.length > 0 ? `__vite__mapDeps([${renderedDeps.join(',')}])` : `[]`, @@ -531,14 +531,14 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { if (!rewroteMarkerStartPos.has(markerStartPos)) { s.update( markerStartPos, - markerStartPos + preloadMarker.length + 2, + markerStartPos + preloadMarker.length, 'void 0', ) } markerStartPos = indexOfMatchInSlice( code, preloadMarkerWithQuote, - markerStartPos + preloadMarker.length + 2, + markerStartPos + preloadMarker.length, ) } From 3dbe36fb7d5a6045fe9131e100f590bada182c92 Mon Sep 17 00:00:00 2001 From: pengbo43 Date: Wed, 1 May 2024 10:09:34 +0800 Subject: [PATCH 5/7] chore: preloadMarkerWithQuote => preloadMarkerRE --- .../vite/src/node/plugins/importAnalysisBuild.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/vite/src/node/plugins/importAnalysisBuild.ts b/packages/vite/src/node/plugins/importAnalysisBuild.ts index 08918633c2e36a..eaaa08483ee358 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -37,7 +37,7 @@ export const preloadMarker = `__VITE_PRELOAD__` export const preloadBaseMarker = `__VITE_PRELOAD_BASE__` export const preloadHelperId = '\0vite/preload-helper.js' -const preloadMarkerWithQuote = new RegExp(preloadMarker, 'g') +const preloadMarkerRE = new RegExp(preloadMarker, 'g') const dynamicImportPrefixRE = /import\s*\(/ @@ -419,15 +419,12 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { let markerStartPos = indexOfMatchInSlice( code, - preloadMarkerWithQuote, + preloadMarkerRE, end, ) // fix issue #3051 if (markerStartPos === -1 && imports.length === 1) { - markerStartPos = indexOfMatchInSlice( - code, - preloadMarkerWithQuote, - ) + markerStartPos = indexOfMatchInSlice(code, preloadMarkerRE) } if (markerStartPos > 0) { @@ -526,7 +523,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { // there may still be markers due to inlined dynamic imports, remove // all the markers regardless - let markerStartPos = indexOfMatchInSlice(code, preloadMarkerWithQuote) + let markerStartPos = indexOfMatchInSlice(code, preloadMarkerRE) while (markerStartPos >= 0) { if (!rewroteMarkerStartPos.has(markerStartPos)) { s.update( @@ -537,7 +534,7 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin { } markerStartPos = indexOfMatchInSlice( code, - preloadMarkerWithQuote, + preloadMarkerRE, markerStartPos + preloadMarker.length, ) } From 5b4ff2a2d578c1a52e794a7919a7b7434622e8d4 Mon Sep 17 00:00:00 2001 From: pengbo43 Date: Wed, 1 May 2024 14:58:09 +0800 Subject: [PATCH 6/7] refactor: replace __VITE_PRELOAD__ with import.meta.__VITE_PRELOAD__ --- 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 eaaa08483ee358..567ee8e513a9f9 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -33,11 +33,11 @@ type FileDep = { */ export const isModernFlag = `__VITE_IS_MODERN__` export const preloadMethod = `__vitePreload` -export const preloadMarker = `__VITE_PRELOAD__` +export const preloadMarker = `import.meta.__VITE_PRELOAD__` export const preloadBaseMarker = `__VITE_PRELOAD_BASE__` export const preloadHelperId = '\0vite/preload-helper.js' -const preloadMarkerRE = new RegExp(preloadMarker, 'g') +const preloadMarkerRE = new RegExp(preloadMarker.split('.').join('\\.'), 'g') const dynamicImportPrefixRE = /import\s*\(/ From 12f13edfa9d4bb01fd91e53bdfa4b1ba7149d9de Mon Sep 17 00:00:00 2001 From: pengbo43 Date: Wed, 1 May 2024 15:14:51 +0800 Subject: [PATCH 7/7] Revert "refactor: replace __VITE_PRELOAD__ with import.meta.__VITE_PRELOAD__" This reverts commit 5b4ff2a2d578c1a52e794a7919a7b7434622e8d4. --- 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 567ee8e513a9f9..eaaa08483ee358 100644 --- a/packages/vite/src/node/plugins/importAnalysisBuild.ts +++ b/packages/vite/src/node/plugins/importAnalysisBuild.ts @@ -33,11 +33,11 @@ type FileDep = { */ export const isModernFlag = `__VITE_IS_MODERN__` export const preloadMethod = `__vitePreload` -export const preloadMarker = `import.meta.__VITE_PRELOAD__` +export const preloadMarker = `__VITE_PRELOAD__` export const preloadBaseMarker = `__VITE_PRELOAD_BASE__` export const preloadHelperId = '\0vite/preload-helper.js' -const preloadMarkerRE = new RegExp(preloadMarker.split('.').join('\\.'), 'g') +const preloadMarkerRE = new RegExp(preloadMarker, 'g') const dynamicImportPrefixRE = /import\s*\(/