From 5ba41196740d6c1169a8960b51023c881a49db13 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 12 Jul 2023 17:02:38 +0200 Subject: [PATCH] chore: cleanup --- docs/config/index.md | 12 ++++++++---- examples/mocks/vite.config.ts | 3 --- packages/vite-node/src/server.ts | 3 +-- packages/vite-node/src/types.ts | 3 --- packages/vitest/src/runtime/execute.ts | 12 +++++------- packages/vitest/src/runtime/mocker.ts | 2 +- packages/vitest/src/runtime/vm.ts | 2 +- 7 files changed, 16 insertions(+), 21 deletions(-) diff --git a/docs/config/index.md b/docs/config/index.md index 2b45088af5d8..9fc5b321b3d5 100644 --- a/docs/config/index.md +++ b/docs/config/index.md @@ -133,9 +133,13 @@ You will not be able to edit your `node_modules` code for debugging, since the c #### deps.external - **Type:** `(string | RegExp)[]` -- **Default:** `['**/node_modules/**']` +- **Default:** `[]` + +Externalize means that Vite will bypass the package to native Node. Externalized dependencies will not be applied Vite's transformers and resolvers, so they do not support HMR on reload. By default, all packages inside `node_modules` are externalized. + +This options support package names as they are written in `node_modules` or specified inside [`deps.moduleDirectories`](#deps-moduledirectories). For example, package `@company/some-name` located inside `packages/some-name` should be specified as `some-name` and `packages` should be included in `deps.moduleDirectories`. Basically, Vitest always checks the file path, not the actual package name. -Externalize means that Vite will bypass the package to native Node. Externalized dependencies will not be applied Vite's transformers and resolvers, so they do not support HMR on reload. Typically, packages under `node_modules` are externalized. +If regexp is used, Vitest calls it on the _file path_, not the package name. #### deps.inline @@ -502,7 +506,7 @@ By providing an object instead of a string you can define individual outputs whe - **Type:** `boolean` - **CLI:** `--experimentalVmThreads`, `--experimental-vm-threads` -- **Version:** Since Vitets 0.34.0 +- **Version:** Since Vitest 0.34.0 Run tests using [VM context](https://nodejs.org/api/vm.html) (inside a sandboxed environment) in a worker pool. @@ -533,7 +537,7 @@ Please, be aware of these issues when using this option. Vitest team cannot fix - **Type:** `string | number` - **CLI:** `--experimentalVmWorkerMemoryLimit`, `--experimental-vm-worker-memory-limit` - **Default:** `1 / CPU Cores` -- **Version:** Since Vitets 0.34.0 +- **Version:** Since Vitest 0.34.0 Specifies the memory limit for workers before they are recycled. This value heavily depends on your environment, so it's better to specify it manually instead of relying on default. diff --git a/examples/mocks/vite.config.ts b/examples/mocks/vite.config.ts index 6afaf98f75ff..76cb1dad1e3e 100644 --- a/examples/mocks/vite.config.ts +++ b/examples/mocks/vite.config.ts @@ -29,9 +29,6 @@ export default defineConfig({ test: { globals: true, environment: 'node', - poolMatchGlobs: [ - ['**/*', 'experimentalVmThreads'], - ], deps: { external: [/src\/external/], interopDefault: true, diff --git a/packages/vite-node/src/server.ts b/packages/vite-node/src/server.ts index 84f4660633e9..a66cdc962c3e 100644 --- a/packages/vite-node/src/server.ts +++ b/packages/vite-node/src/server.ts @@ -1,7 +1,7 @@ import { performance } from 'node:perf_hooks' import { existsSync } from 'node:fs' import { join, relative, resolve } from 'pathe' -import { type PackageCache, type TransformResult, type ViteDevServer } from 'vite' +import { type TransformResult, type ViteDevServer } from 'vite' import createDebug from 'debug' import type { EncodedSourceMap } from '@jridgewell/trace-mapping' import type { DebuggerOptions, FetchResult, ViteNodeResolveId, ViteNodeServerOptions } from './types' @@ -27,7 +27,6 @@ export class ViteNodeServer { }>() externalizeCache = new Map>() - packageCache = new Map() debugger?: Debugger diff --git a/packages/vite-node/src/types.ts b/packages/vite-node/src/types.ts index 5ca54827de35..18d6016a5377 100644 --- a/packages/vite-node/src/types.ts +++ b/packages/vite-node/src/types.ts @@ -1,4 +1,3 @@ -import type { Context } from 'node:vm' import type { ViteHotContext } from 'vite/types/hot' import type { EncodedSourceMap } from '@jridgewell/trace-mapping' import type { ModuleCacheMap, ViteNodeRunner } from './client' @@ -77,11 +76,9 @@ export interface ViteNodeRunnerOptions { createHotContext?: CreateHotContextFunction base?: string moduleCache?: ModuleCacheMap - externalCache?: ModuleCacheMap interopDefault?: boolean requestStubs?: Record debug?: boolean - context?: Context } export interface ViteNodeResolveId { diff --git a/packages/vitest/src/runtime/execute.ts b/packages/vitest/src/runtime/execute.ts index b1268d3bda47..fe21e828a2c1 100644 --- a/packages/vitest/src/runtime/execute.ts +++ b/packages/vitest/src/runtime/execute.ts @@ -73,7 +73,7 @@ export async function startVitestExecutor(options: ContextExecutorOptions) { } function catchError(err: unknown, type: string) { - const worker = options.state + const worker = state() const error = processError(err) if (!isPrimitive(error)) { error.VITEST_TEST_NAME = worker.current?.name @@ -176,16 +176,16 @@ export class VitestExecutor extends ViteNodeRunner { } get state() { - return this.options.state + return getWorkerState() || this.options.state } shouldResolveId(id: string, _importee?: string | undefined): boolean { if (isInternalRequest(id) || id.startsWith('data:')) return false - const environment = this.options.state.environment.name + const transformMode = this.state.environment?.transformMode ?? 'ssr' // do not try and resolve node builtins in Node // import('url') returns Node internal even if 'url' package is installed - return environment === 'node' ? !isNodeBuiltin(id) : !id.startsWith('node:') + return transformMode === 'ssr' ? !isNodeBuiltin(id) : !id.startsWith('node:') } async originalResolveUrl(id: string, importer?: string) { @@ -253,10 +253,8 @@ export class VitestExecutor extends ViteNodeRunner { } prepareContext(context: Record) { - const workerState = this.state - // support `import.meta.vitest` for test entry - if (workerState.filepath && normalize(workerState.filepath) === normalize(context.__filename)) { + if (this.state.filepath && normalize(this.state.filepath) === normalize(context.__filename)) { const globalNamespace = this.options.context || globalThis // @ts-expect-error injected untyped global Object.defineProperty(context.__vite_ssr_import_meta__, 'vitest', { get: () => globalNamespace.__vitest_index__ }) diff --git a/packages/vitest/src/runtime/mocker.ts b/packages/vitest/src/runtime/mocker.ts index 837082ba5787..adfd9485e981 100644 --- a/packages/vitest/src/runtime/mocker.ts +++ b/packages/vitest/src/runtime/mocker.ts @@ -59,7 +59,7 @@ export class VitestMocker { ) { const context = this.executor.options.context if (context) - this.primitives = vm.runInContext('({ Object, Symbol, Error, Function, RegExp, Array, Map })', context) + this.primitives = vm.runInContext('({ Object, Error, Function, RegExp, Symbol, Array, Map })', context) else this.primitives = { Object, Error, Function, RegExp, Symbol: globalThis.Symbol, Array, Map } diff --git a/packages/vitest/src/runtime/vm.ts b/packages/vitest/src/runtime/vm.ts index e5ee30e32ff0..6c016c1c5919 100644 --- a/packages/vitest/src/runtime/vm.ts +++ b/packages/vitest/src/runtime/vm.ts @@ -66,7 +66,7 @@ export async function run(ctx: WorkerContext) { getSourceMap: source => moduleCache.getSourceMap(source), }) - const vm = await environment.setupVM!(ctx.environment.options || ctx.config.environmentOptions || {}) + const vm = await environment.setupVM(ctx.environment.options || ctx.config.environmentOptions || {}) state.durations.environment = performance.now() - state.durations.environment