diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/entry-mix-dep.mjs b/packages/vite/src/node/ssr/__tests__/fixtures/entry-mix-dep.mjs new file mode 100644 index 00000000000000..e0a8faa6815015 --- /dev/null +++ b/packages/vite/src/node/ssr/__tests__/fixtures/entry-mix-dep.mjs @@ -0,0 +1,2 @@ +import mixDep from '@vitejs/test-mix-dep' +export default mixDep diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/entry-mix-dep.ts b/packages/vite/src/node/ssr/__tests__/fixtures/entry-mix-dep.ts deleted file mode 100644 index bee4a241c138ca..00000000000000 --- a/packages/vite/src/node/ssr/__tests__/fixtures/entry-mix-dep.ts +++ /dev/null @@ -1,2 +0,0 @@ -import * as mixDep from '@vitejs/test-mix-dep' -export { mixDep } diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.cjs.js b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.cjs.js deleted file mode 100644 index 81e30017b87967..00000000000000 --- a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.cjs.js +++ /dev/null @@ -1 +0,0 @@ -console.log('dist/emotion-react.cjs.js') diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.cjs.mjs b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.cjs.mjs deleted file mode 100644 index 6010e0896a3c27..00000000000000 --- a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.cjs.mjs +++ /dev/null @@ -1 +0,0 @@ -console.log('dist/emotion-react.cjs.mjs') diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.esm.js b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.esm.js deleted file mode 100644 index 65406a5a8406aa..00000000000000 --- a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/emotion-react.esm.js +++ /dev/null @@ -1 +0,0 @@ -console.log('dist/emotion-react.esm.js') diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.cjs.js b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.cjs.js new file mode 100644 index 00000000000000..9837417e5254d7 --- /dev/null +++ b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.cjs.js @@ -0,0 +1 @@ +module.exports = 'default' diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.cjs.mjs b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.cjs.mjs new file mode 100644 index 00000000000000..b4dd8a6c96d5f2 --- /dev/null +++ b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.cjs.mjs @@ -0,0 +1 @@ +export default 'import' diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.esm.js b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.esm.js new file mode 100644 index 00000000000000..4f51d884a6abf7 --- /dev/null +++ b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/index.esm.js @@ -0,0 +1 @@ +module.exports = 'module' diff --git a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/package.json b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/package.json index 97e9e3d74850b2..10ef87e4ef9320 100644 --- a/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/package.json +++ b/packages/vite/src/node/ssr/__tests__/fixtures/mix-dep/package.json @@ -4,10 +4,10 @@ "exports": { ".": { "module": { - "default": "./emotion-react.esm.js" + "default": "./index.esm.js" }, - "import": "./emotion-react.cjs.mjs", - "default": "./emotion-react.cjs.js" + "import": "./index.cjs.mjs", + "default": "./index.cjs.js" } } } diff --git a/packages/vite/src/node/ssr/__tests__/resolve.spec.ts b/packages/vite/src/node/ssr/__tests__/resolve.spec.ts index d18d9e12719320..1a98332d9a50ee 100644 --- a/packages/vite/src/node/ssr/__tests__/resolve.spec.ts +++ b/packages/vite/src/node/ssr/__tests__/resolve.spec.ts @@ -1,17 +1,50 @@ import { fileURLToPath } from 'node:url' -import { test } from 'vitest' +import { describe, expect, onTestFinished, test } from 'vitest' import { createServer } from '../../server' -test('resolve', async () => { - const server = await createServer({ - clearScreen: false, - configFile: false, - root: fileURLToPath(new URL('.', import.meta.url)), +describe('exports', () => { + async function testServer() { + const server = await createServer({ + clearScreen: false, + configFile: false, + root: fileURLToPath(new URL('.', import.meta.url)), + }) + await server.pluginContainer.buildStart({}) + onTestFinished(async () => { + await server.close() + }) + return server + } + + test('resolveId ssr', async () => { + const server = await testServer() + const resolved = await server.pluginContainer.resolveId( + '@vitejs/test-mix-dep', + undefined, + { + ssr: true, + }, + ) + expect(resolved?.id).toContain('index.cjs.mjs') + }) + + test('resolveId no-ssr', async () => { + const server = await testServer() + const resolved = await server.pluginContainer.resolveId( + '@vitejs/test-mix-dep', + ) + expect(resolved?.id).toContain('index.esm.js') + }) + + test('ssrLoadModule direct', async () => { + const server = await testServer() + const mod = await server.ssrLoadModule('@vitejs/test-mix-dep') + expect(mod.default).toEqual('import') + }) + + test('ssrLoadModule external', async () => { + const server = await testServer() + const mod = await server.ssrLoadModule('/fixtures/entry-mix-dep') + expect(mod.default).toEqual('import') }) - await server.pluginContainer.buildStart({}) - console.log( - await server.pluginContainer.resolveId('@vitejs/test-mix-dep', undefined, { - ssr: true, - }), - ) })