diff --git a/packages/vite/src/node/__tests__/environment.spec.ts b/packages/vite/src/node/__tests__/environment.spec.ts new file mode 100644 index 00000000000000..5009f5b0ae7340 --- /dev/null +++ b/packages/vite/src/node/__tests__/environment.spec.ts @@ -0,0 +1,101 @@ +import { fileURLToPath } from 'node:url' +import path from 'node:path' +import { expect, test } from 'vitest' +import { createServer } from '../server' +import { createServerModuleRunner } from '../ssr/runtime/serverModuleRunner' +import type { ResolveIdFn } from '../idResolver' +import { createIdResolver } from '../idResolver' +import { normalizePath } from '../utils' + +const root = fileURLToPath(new URL('./', import.meta.url)) + +async function createDevServer() { + const server = await createServer({ + configFile: false, + root, + logLevel: 'silent', + plugins: [ + (() => { + let idResolver: ResolveIdFn + return { + name: 'environment-alias-test-plugin', + configResolved(config) { + idResolver = createIdResolver(config, {}) + }, + async resolveId(id) { + return await idResolver(this.environment, id) + }, + } + })(), + ], + environments: { + client: { + resolve: { + alias: [ + { + find: 'mod', + replacement: '/fixtures/environment-alias/test.client.js', + }, + ], + }, + }, + ssr: { + resolve: { + alias: [ + { + find: 'mod', + replacement: '/fixtures/environment-alias/test.ssr.js', + }, + ], + }, + }, + rsc: { + resolve: { + alias: [ + { + find: 'mod', + replacement: '/fixtures/environment-alias/test.rsc.js', + }, + ], + }, + }, + }, + }) + + const moduleRunner = createServerModuleRunner(server.environments.rsc) + return { server, moduleRunner } +} + +test('alias', async () => { + expect.assertions(7) + const { server, moduleRunner } = await createDevServer() + + const [clientId, ssrId, rscId, clientReq, ssrReq, rscReq, rscMod] = + await Promise.all([ + server.environments.client.pluginContainer.resolveId('mod'), + server.environments.ssr.pluginContainer.resolveId('mod'), + server.environments.rsc.pluginContainer.resolveId('mod'), + server.environments.client.transformRequest('mod'), + server.environments.ssr.transformRequest('mod'), + server.environments.rsc.transformRequest('mod'), + moduleRunner.import('mod'), + ]) + + expect(clientId?.id).toEqual( + normalizePath( + path.join(root, '/fixtures/environment-alias/test.client.js'), + ), + ) + expect(ssrId?.id).toEqual( + normalizePath(path.join(root, '/fixtures/environment-alias/test.ssr.js')), + ) + expect(rscId?.id).toEqual( + normalizePath(path.join(root, '/fixtures/environment-alias/test.rsc.js')), + ) + + expect(clientReq?.code ?? '').toContain('(client)') + expect(ssrReq?.code ?? '').toContain('(ssr)') + expect(rscReq?.code ?? '').toContain('(rsc)') + + expect(rscMod?.msg).toContain('(rsc)') +}) diff --git a/packages/vite/src/node/__tests__/fixtures/environment-alias/test.client.js b/packages/vite/src/node/__tests__/fixtures/environment-alias/test.client.js new file mode 100644 index 00000000000000..aa2ed1e401a266 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/environment-alias/test.client.js @@ -0,0 +1 @@ +export const msg = `[success] (client) alias to mod path` diff --git a/packages/vite/src/node/__tests__/fixtures/environment-alias/test.rsc.js b/packages/vite/src/node/__tests__/fixtures/environment-alias/test.rsc.js new file mode 100644 index 00000000000000..68cfb5abf049d6 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/environment-alias/test.rsc.js @@ -0,0 +1 @@ +export const msg = `[success] (rsc) alias to mod path` diff --git a/packages/vite/src/node/__tests__/fixtures/environment-alias/test.ssr.js b/packages/vite/src/node/__tests__/fixtures/environment-alias/test.ssr.js new file mode 100644 index 00000000000000..3518331b84db03 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/environment-alias/test.ssr.js @@ -0,0 +1 @@ +export const msg = `[success] (ssr) alias to mod path` diff --git a/packages/vite/src/node/idResolver.ts b/packages/vite/src/node/idResolver.ts index 6cd62a93b3dcf6..cb1a6391521367 100644 --- a/packages/vite/src/node/idResolver.ts +++ b/packages/vite/src/node/idResolver.ts @@ -40,7 +40,7 @@ export function createIdResolver( pluginContainer = await createEnvironmentPluginContainer( environment as Environment, [ - aliasPlugin({ entries: config.resolve.alias }), // TODO: resolve.alias per environment? + aliasPlugin({ entries: environment.options.resolve.alias }), resolvePlugin({ root: config.root, isProduction: config.isProduction, @@ -74,7 +74,7 @@ export function createIdResolver( pluginContainer = await createEnvironmentPluginContainer( environment as Environment, [ - aliasPlugin({ entries: config.resolve.alias }), // TODO: resolve.alias per environment? + aliasPlugin({ entries: environment.options.resolve.alias }), ], ) aliasOnlyPluginContainerMap.set(environment, pluginContainer)