From 67695b3a059df0fdb94cf4ff3111e26b71f71be5 Mon Sep 17 00:00:00 2001 From: ygj6 Date: Sat, 14 Aug 2021 12:07:04 +0800 Subject: [PATCH 1/3] fix(scan): No matching 'export default' in comments fix #4598 --- packages/vite/src/node/optimizer/scan.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index 26ad02675e518a..e80198fbee5d02 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -41,6 +41,7 @@ export const importsRE = /(? @@ -235,6 +236,10 @@ function esbuildScanPlugin( js += content + '\n' } } + // empty singleline & multiline comments to avoid matching comments + const code = js + .replace(multilineCommentsRE, '/* */') + .replace(singleCommentsRegex, '') if ( loader.startsWith('ts') && @@ -247,8 +252,6 @@ function esbuildScanPlugin( // the solution is to add `import 'x'` for every source to force // esbuild to keep crawling due to potential side effects. let m - // empty multiline comments to avoid matching commented out imports - const code = js.replace(multilineCommentsRE, '/* */') while ((m = importsRE.exec(code)) != null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === importsRE.lastIndex) { @@ -258,11 +261,11 @@ function esbuildScanPlugin( } } - if (!js.includes(`export default`)) { + if (!code.includes(`export default`)) { js += `\nexport default {}` } - if (js.includes('import.meta.glob')) { + if (code.includes('import.meta.glob')) { return { // transformGlob already transforms to js loader: 'js', From f75d000ad59e5b8853471f9b194245cb61d2e324 Mon Sep 17 00:00:00 2001 From: ygj6 Date: Sat, 14 Aug 2021 17:23:47 +0800 Subject: [PATCH 2/3] fix(scan): add test case --- packages/vite/src/node/__tests__/scan.spec.ts | 20 ++++++++++++++++++- packages/vite/src/node/optimizer/scan.ts | 6 +++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/node/__tests__/scan.spec.ts b/packages/vite/src/node/__tests__/scan.spec.ts index 28495709d02631..7d29e22bc0e009 100644 --- a/packages/vite/src/node/__tests__/scan.spec.ts +++ b/packages/vite/src/node/__tests__/scan.spec.ts @@ -1,4 +1,10 @@ -import { scriptRE, commentRE, importsRE } from '../optimizer/scan' +import { + scriptRE, + commentRE, + importsRE, + multilineCommentsRE, + singleCommentsRE +} from '../optimizer/scan' describe('optimizer-scan:script-test', () => { const scriptContent = `import { defineComponent } from 'vue' @@ -102,4 +108,16 @@ describe('optimizer-scan:script-test', () => { expect(importsRE.test(str)).toBe(false) }) }) + + test('script comments test', () => { + multilineCommentsRE.lastIndex = 0 + let ret = `/* + export default { } + */`.replace(multilineCommentsRE, '') + expect(ret).not.toContain('export default') + + singleCommentsRE.lastIndex = 0 + ret = `//export default { }`.replace(singleCommentsRE, '') + expect(ret).not.toContain('export default') + }) }) diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index e80198fbee5d02..0b1c3f4b4f692d 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -40,8 +40,8 @@ const htmlTypesRE = /\.(html|vue|svelte)$/ export const importsRE = /(? @@ -239,7 +239,7 @@ function esbuildScanPlugin( // empty singleline & multiline comments to avoid matching comments const code = js .replace(multilineCommentsRE, '/* */') - .replace(singleCommentsRegex, '') + .replace(singleCommentsRE, '') if ( loader.startsWith('ts') && From 1ff8f8518cd67303e2013c4f32d74d99a1696422 Mon Sep 17 00:00:00 2001 From: ygj6 Date: Sat, 14 Aug 2021 17:30:04 +0800 Subject: [PATCH 3/3] refactor: rename variable --- packages/vite/src/node/__tests__/scan.spec.ts | 6 +++--- packages/vite/src/node/optimizer/scan.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/__tests__/scan.spec.ts b/packages/vite/src/node/__tests__/scan.spec.ts index 7d29e22bc0e009..95f25c5a90db8e 100644 --- a/packages/vite/src/node/__tests__/scan.spec.ts +++ b/packages/vite/src/node/__tests__/scan.spec.ts @@ -3,7 +3,7 @@ import { commentRE, importsRE, multilineCommentsRE, - singleCommentsRE + singlelineCommentsRE } from '../optimizer/scan' describe('optimizer-scan:script-test', () => { @@ -116,8 +116,8 @@ describe('optimizer-scan:script-test', () => { */`.replace(multilineCommentsRE, '') expect(ret).not.toContain('export default') - singleCommentsRE.lastIndex = 0 - ret = `//export default { }`.replace(singleCommentsRE, '') + singlelineCommentsRE.lastIndex = 0 + ret = `//export default { }`.replace(singlelineCommentsRE, '') expect(ret).not.toContain('export default') }) }) diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index 0b1c3f4b4f692d..83eb9e703195ba 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -41,7 +41,7 @@ export const importsRE = /(? @@ -239,7 +239,7 @@ function esbuildScanPlugin( // empty singleline & multiline comments to avoid matching comments const code = js .replace(multilineCommentsRE, '/* */') - .replace(singleCommentsRE, '') + .replace(singlelineCommentsRE, '') if ( loader.startsWith('ts') &&