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 { isBuiltin } from 'node:module'
|
||||||
import { pathToFileURL } from 'node:url'
|
import { pathToFileURL } from 'node:url'
|
||||||
import { KNOWN_ASSET_RE } from '@vitest/utils/constants'
|
import { KNOWN_ASSET_RE } from '@vitest/utils/constants'
|
||||||
|
import { cleanUrl } from '@vitest/utils/helpers'
|
||||||
import { findNearestPackageData } from '@vitest/utils/resolver'
|
import { findNearestPackageData } from '@vitest/utils/resolver'
|
||||||
import * as esModuleLexer from 'es-module-lexer'
|
import * as esModuleLexer from 'es-module-lexer'
|
||||||
import { dirname, extname, join, resolve } from 'pathe'
|
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
|
// The code from https://github.com/unjs/mlly/blob/c5bcca0cda175921344fd6de1bc0c499e73e5dac/src/syntax.ts#L51-L98
|
||||||
async function isValidNodeImport(id: string) {
|
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)
|
const extension = extname(id)
|
||||||
|
|
||||||
if (BUILTIN_EXTENSIONS.has(extension)) {
|
if (BUILTIN_EXTENSIONS.has(extension)) {
|
||||||
|
|||||||
16
pnpm-lock.yaml
generated
16
pnpm-lock.yaml
generated
@ -1226,6 +1226,12 @@ importers:
|
|||||||
'@vitest/test-dep-conditions':
|
'@vitest/test-dep-conditions':
|
||||||
specifier: file:./deps/test-dep-conditions
|
specifier: file:./deps/test-dep-conditions
|
||||||
version: file:test/config/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:
|
inline-dep:
|
||||||
specifier: file:./deps/vite-ssr-resolve/inline-dep
|
specifier: file:./deps/vite-ssr-resolve/inline-dep
|
||||||
version: file:test/config/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':
|
'@vitest/test-dep-nested-cjs@file:test/core/deps/dep-nested-cjs':
|
||||||
resolution: {directory: test/core/deps/dep-nested-cjs, type: directory}
|
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':
|
'@vitest/test-dep1@file:test/core/deps/dep1':
|
||||||
resolution: {directory: test/core/deps/dep1, type: directory}
|
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-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-dep1@file:test/core/deps/dep1': {}
|
||||||
|
|
||||||
'@vitest/test-dep2@file:test/core/deps/dep2':
|
'@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-preview": "workspace:*",
|
||||||
"@vitest/browser-webdriverio": "workspace:*",
|
"@vitest/browser-webdriverio": "workspace:*",
|
||||||
"@vitest/test-dep-conditions": "file:./deps/test-dep-conditions",
|
"@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",
|
"inline-dep": "file:./deps/vite-ssr-resolve/inline-dep",
|
||||||
"other-dep": "file:./deps/vite-ssr-resolve/other-dep",
|
"other-dep": "file:./deps/vite-ssr-resolve/other-dep",
|
||||||
"ssr-no-external-dep": "file:./deps/vite-ssr-resolve/ssr-no-external-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