mirror of
https://github.com/vitest-dev/vitest.git
synced 2025-12-08 18:26:03 +00:00
fix: fix external behavior with deps.optimizer (#9125)
This commit is contained in:
parent
a5d98fd0d8
commit
4c75492cca
@ -3,6 +3,7 @@ import { existsSync, promises as fsp } from 'node:fs'
|
||||
import { isBuiltin } from 'node:module'
|
||||
import { pathToFileURL } from 'node:url'
|
||||
import { KNOWN_ASSET_RE } from '@vitest/utils/constants'
|
||||
import { cleanUrl } from '@vitest/utils/helpers'
|
||||
import { findNearestPackageData } from '@vitest/utils/resolver'
|
||||
import * as esModuleLexer from 'es-module-lexer'
|
||||
import { dirname, extname, join, resolve } from 'pathe'
|
||||
@ -109,6 +110,10 @@ export function guessCJSversion(id: string): string | undefined {
|
||||
|
||||
// The code from https://github.com/unjs/mlly/blob/c5bcca0cda175921344fd6de1bc0c499e73e5dac/src/syntax.ts#L51-L98
|
||||
async function isValidNodeImport(id: string) {
|
||||
// clean url to strip off `?v=...` query etc.
|
||||
// node can natively import files with query params, so externalizing them is safe.
|
||||
id = cleanUrl(id)
|
||||
|
||||
const extension = extname(id)
|
||||
|
||||
if (BUILTIN_EXTENSIONS.has(extension)) {
|
||||
|
||||
16
pnpm-lock.yaml
generated
16
pnpm-lock.yaml
generated
@ -1226,6 +1226,12 @@ importers:
|
||||
'@vitest/test-dep-conditions':
|
||||
specifier: file:./deps/test-dep-conditions
|
||||
version: file:test/config/deps/test-dep-conditions
|
||||
'@vitest/test-dep-optimizer-external':
|
||||
specifier: file:./deps/optimizer/external
|
||||
version: file:test/config/deps/optimizer/external
|
||||
'@vitest/test-dep-optimizer-optimized':
|
||||
specifier: file:./deps/optimizer/optimized
|
||||
version: file:test/config/deps/optimizer/optimized
|
||||
inline-dep:
|
||||
specifier: file:./deps/vite-ssr-resolve/inline-dep
|
||||
version: file:test/config/deps/vite-ssr-resolve/inline-dep
|
||||
@ -4701,6 +4707,12 @@ packages:
|
||||
'@vitest/test-dep-nested-cjs@file:test/core/deps/dep-nested-cjs':
|
||||
resolution: {directory: test/core/deps/dep-nested-cjs, type: directory}
|
||||
|
||||
'@vitest/test-dep-optimizer-external@file:test/config/deps/optimizer/external':
|
||||
resolution: {directory: test/config/deps/optimizer/external, type: directory}
|
||||
|
||||
'@vitest/test-dep-optimizer-optimized@file:test/config/deps/optimizer/optimized':
|
||||
resolution: {directory: test/config/deps/optimizer/optimized, type: directory}
|
||||
|
||||
'@vitest/test-dep1@file:test/core/deps/dep1':
|
||||
resolution: {directory: test/core/deps/dep1, type: directory}
|
||||
|
||||
@ -12848,6 +12860,10 @@ snapshots:
|
||||
|
||||
'@vitest/test-dep-nested-cjs@file:test/core/deps/dep-nested-cjs': {}
|
||||
|
||||
'@vitest/test-dep-optimizer-external@file:test/config/deps/optimizer/external': {}
|
||||
|
||||
'@vitest/test-dep-optimizer-optimized@file:test/config/deps/optimizer/optimized': {}
|
||||
|
||||
'@vitest/test-dep1@file:test/core/deps/dep1': {}
|
||||
|
||||
'@vitest/test-dep2@file:test/core/deps/dep2':
|
||||
|
||||
1
test/config/deps/optimizer/external/index.js
vendored
Normal file
1
test/config/deps/optimizer/external/index.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
export default {}
|
||||
6
test/config/deps/optimizer/external/package.json
vendored
Normal file
6
test/config/deps/optimizer/external/package.json
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "@vitest/test-dep-optimizer-external",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"main": "./index.js"
|
||||
}
|
||||
1
test/config/deps/optimizer/optimized/index.js
Normal file
1
test/config/deps/optimizer/optimized/index.js
Normal file
@ -0,0 +1 @@
|
||||
export default {}
|
||||
6
test/config/deps/optimizer/optimized/package.json
Normal file
6
test/config/deps/optimizer/optimized/package.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"name": "@vitest/test-dep-optimizer-optimized",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"main": "./index.js"
|
||||
}
|
||||
7
test/config/fixtures/optimizer/external/basic.test.ts
vendored
Normal file
7
test/config/fixtures/optimizer/external/basic.test.ts
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
import { it, expect } from "vitest";
|
||||
// @ts-ignore
|
||||
import * as testDep from "@vitest/test-dep-optimizer-external"
|
||||
|
||||
it("passes", () => {
|
||||
expect(testDep.default).toBeDefined();
|
||||
});
|
||||
25
test/config/fixtures/optimizer/external/vitest.config.ts
vendored
Normal file
25
test/config/fixtures/optimizer/external/vitest.config.ts
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
import { defineConfig } from "vitest/config";
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
deps: {
|
||||
optimizer: {
|
||||
ssr: {
|
||||
enabled: true,
|
||||
// need at least one to trigger dep optimization
|
||||
include: ["@vitest/test-dep-optimizer-optimized"],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
{
|
||||
name: 'test-external',
|
||||
transform(_code, id, _options) {
|
||||
if (id.includes('test-dep-optimizer-external')) {
|
||||
this.error('"@vitest/test-dep-optimizer-external" is expected to be externalized');
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
});
|
||||
@ -11,6 +11,8 @@
|
||||
"@vitest/browser-preview": "workspace:*",
|
||||
"@vitest/browser-webdriverio": "workspace:*",
|
||||
"@vitest/test-dep-conditions": "file:./deps/test-dep-conditions",
|
||||
"@vitest/test-dep-optimizer-external": "file:./deps/optimizer/external",
|
||||
"@vitest/test-dep-optimizer-optimized": "file:./deps/optimizer/optimized",
|
||||
"inline-dep": "file:./deps/vite-ssr-resolve/inline-dep",
|
||||
"other-dep": "file:./deps/vite-ssr-resolve/other-dep",
|
||||
"ssr-no-external-dep": "file:./deps/vite-ssr-resolve/ssr-no-external-dep",
|
||||
|
||||
15
test/config/test/optimizer.test.ts
Normal file
15
test/config/test/optimizer.test.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { expect, it } from 'vitest'
|
||||
import { runVitest } from '../../test-utils'
|
||||
|
||||
it('external works with optimizer', async () => {
|
||||
const { errorTree } = await runVitest({
|
||||
root: 'fixtures/optimizer/external',
|
||||
})
|
||||
expect(errorTree()).toMatchInlineSnapshot(`
|
||||
{
|
||||
"basic.test.ts": {
|
||||
"passes": "passed",
|
||||
},
|
||||
}
|
||||
`)
|
||||
})
|
||||
Loading…
x
Reference in New Issue
Block a user