···6161 if (extension !== '.js')
6262 return false
63636464- if (/\.(\w+-)?esm?(-\w+)?\.js$|\/(esm?)\//.test(id))
6565- return false
6666-6764 id = id.replace('file:///', '')
68656966 const package_ = await findNearestPackageData(dirname(id))
70677168 if (package_.type === 'module')
7269 return true
7070+7171+ if (/\.(\w+-)?esm?(-\w+)?\.js$|\/(esm?)\//.test(id))
7272+ return false
73737474 const code = await fsp.readFile(id, 'utf8').catch(() => '')
7575
+12
test/vite-node/test/external.test.ts
···11+import { expect, test } from 'vitest'
22+33+// @ts-expect-error no ts
44+import * as dep1 from '@vitest/test-dep1'
55+66+// @ts-expect-error no ts
77+import * as dep2 from '@vitest/test-dep2'
88+99+test('no dual package hazard by externalizing esm deps by default', async () => {
1010+ dep1.data.hello = 'world'
1111+ expect(dep2.data.hello).toBe('world')
1212+})
···11+// esm/index.js was detected as isValidNodeImport(id) = false
22+// event if package.json has type = module,
33+// which causes dual package hazard when other external esm import esm/index.js.
44+export const data = {}