Skip to content

Commit 91f8599

Browse files
authoredSep 17, 2024··
fix(vite-node): fix esm false-detection inside comment (#6506)
1 parent 7d028cb commit 91f8599

File tree

6 files changed

+35
-1
lines changed

6 files changed

+35
-1
lines changed
 

‎packages/vite-node/src/externalize.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ const ESM_SYNTAX_RE
1111
const ESM_EXT_RE = /\.(es|esm|esm-browser|esm-bundler|es6|module)\.js$/
1212
const ESM_FOLDER_RE = /\/(es|esm)\/(.*\.js)$/
1313

14+
// https://stackoverflow.com/a/15123777
15+
const COMMENT_RE = /\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm
16+
1417
const defaultInline = [
1518
/virtual:/,
1619
/\.[mc]?ts$/,
@@ -79,7 +82,7 @@ async function isValidNodeImport(id: string) {
7982

8083
const code = await fsp.readFile(id, 'utf8').catch(() => '')
8184

82-
return !ESM_SYNTAX_RE.test(code)
85+
return !ESM_SYNTAX_RE.test(code.replace(COMMENT_RE, ''))
8386
}
8487

8588
const _defaultExternalizeCache = new Map<string, Promise<string | false>>()

‎pnpm-lock.yaml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// import x from "x"
2+
/** import x from "x" */
3+
/**
4+
* import x from "x"
5+
*/
6+
module.exports = { test: 'ok' }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "@vitest/test-dep-esm-comment",
3+
"type": "commonjs",
4+
"exports": "./index.js"
5+
}

‎test/core/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@vitest/expect": "workspace:*",
1717
"@vitest/mocker": "workspace:*",
1818
"@vitest/runner": "workspace:*",
19+
"@vitest/test-dep-esm-comment": "file:./deps/dep-esm-comment",
1920
"@vitest/test-dep1": "file:./deps/dep1",
2021
"@vitest/test-dep2": "file:./deps/dep2",
2122
"@vitest/utils": "workspace:*",

‎test/core/test/dual-package-hazard.test.ts

+11
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { createRequire } from 'node:module'
12
import { expect, test } from 'vitest'
23

34
// @ts-expect-error no ts
@@ -6,7 +7,17 @@ import * as dep1 from '@vitest/test-dep1'
67
// @ts-expect-error no ts
78
import * as dep2 from '@vitest/test-dep2'
89

10+
// @ts-expect-error no ts
11+
import depEsmComment from '@vitest/test-dep-esm-comment'
12+
13+
const require = createRequire(import.meta.url)
14+
915
test('no dual package hazard by externalizing esm deps by default', async () => {
1016
dep1.data.hello = 'world'
1117
expect(dep2.data.hello).toBe('world')
1218
})
19+
20+
test('externalize cjs with esm comment', async () => {
21+
const depEsmCommentRequire = require('@vitest/test-dep-esm-comment')
22+
expect(depEsmComment).toBe(depEsmCommentRequire)
23+
})

0 commit comments

Comments
 (0)
Please sign in to comment.