diff --git a/packages/vite-node/src/server.ts b/packages/vite-node/src/server.ts index a6bd79efda19..929b663c33c3 100644 --- a/packages/vite-node/src/server.ts +++ b/packages/vite-node/src/server.ts @@ -54,7 +54,8 @@ export class ViteNodeServer { async resolveId(id: string, importer?: string): Promise { if (importer && !importer.startsWith(this.server.config.root)) importer = join(this.server.config.root, importer) - return this.server.pluginContainer.resolveId(id, importer, { ssr: true }) + const mode = (importer && this.getTransformMode(importer)) || 'ssr' + return this.server.pluginContainer.resolveId(id, importer, { ssr: mode === 'ssr' }) } async fetchModule(id: string): Promise { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c160f0c5a8c..8de30507a22a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -877,6 +877,16 @@ importers: pathe: 0.2.0 vitest: link:../../packages/vitest + test/vite-node: + specifiers: + vite: ^2.9.10 + vite-node: workspace:* + vitest: workspace:* + devDependencies: + vite: 2.9.10 + vite-node: link:../../packages/vite-node + vitest: link:../../packages/vitest + test/web-worker: specifiers: '@vitest/web-worker': workspace:* @@ -18109,13 +18119,6 @@ packages: fsevents: 2.3.2 dev: true - /rollup/2.75.5: - resolution: {integrity: sha512-JzNlJZDison3o2mOxVmb44Oz7t74EfSd1SQrplQk0wSaXV7uLQXtVdHbxlcT3w+8tZ1TL4r/eLfc7nAbz38BBA==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - /rollup/2.75.7: resolution: {integrity: sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==} engines: {node: '>=10.0.0'} @@ -20750,7 +20753,7 @@ packages: esbuild: 0.14.42 postcss: 8.4.14 resolve: 1.22.0 - rollup: 2.75.5 + rollup: 2.75.7 optionalDependencies: fsevents: 2.3.2 diff --git a/test/vite-node/package.json b/test/vite-node/package.json new file mode 100644 index 000000000000..6cc633488489 --- /dev/null +++ b/test/vite-node/package.json @@ -0,0 +1,13 @@ +{ + "name": "@vitest/test-vite-node", + "private": true, + "scripts": { + "test": "vitest", + "coverage": "vitest run --coverage" + }, + "devDependencies": { + "vite": "^2.9.10", + "vite-node": "workspace:*", + "vitest": "workspace:*" + } +} diff --git a/test/vite-node/test/server.test.ts b/test/vite-node/test/server.test.ts new file mode 100644 index 000000000000..9e407dad3c9a --- /dev/null +++ b/test/vite-node/test/server.test.ts @@ -0,0 +1,31 @@ +import type { ViteDevServer } from 'vite' +import { ViteNodeServer } from 'vite-node/server' +import { describe, expect, test, vi } from 'vitest' + +const mockDevServer = (options: any = {}) => { + return options as ViteDevServer +} + +describe('server works correctly', async () => { + test('resolve id considers transform mode', async () => { + const resolveId = vi.fn() + + const vnServer = new ViteNodeServer(mockDevServer({ + pluginContainer: { resolveId }, + config: { + root: '/', + }, + }), { + transformMode: { + web: [/web/], + ssr: [/ssr/], + }, + }) + + await vnServer.resolveId('/path', '/web path') + expect(resolveId).toHaveBeenCalledWith('/path', '/web path', { ssr: false }) + + await vnServer.resolveId('/ssr', '/ssr path') + expect(resolveId).toHaveBeenCalledWith('/ssr', '/ssr path', { ssr: true }) + }) +}) diff --git a/test/vite-node/vitest.config.ts b/test/vite-node/vitest.config.ts new file mode 100644 index 000000000000..1515dfeb73a4 --- /dev/null +++ b/test/vite-node/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + clearMocks: true, + }, +})