diff --git a/packages/plugin-rsc/src/browser.ts b/packages/plugin-rsc/src/browser.ts index e5a52f945..0892a8879 100644 --- a/packages/plugin-rsc/src/browser.ts +++ b/packages/plugin-rsc/src/browser.ts @@ -10,7 +10,9 @@ function initialize(): void { load: async (id) => { if (!import.meta.env.__vite_rsc_build__) { // @ts-ignore - return __vite_rsc_raw_import__(import.meta.env.BASE_URL + id.slice(1)) + return __vite_rsc_raw_import__( + withTrailingSlash(import.meta.env.BASE_URL) + id.slice(1), + ) } else { const import_ = clientReferences.default[id] if (!import_) { @@ -21,3 +23,12 @@ function initialize(): void { }, }) } + +// Vite normalizes `config.base` to have trailing slash, but not for `import.meta.env.BASE_URL`. +// https://github.com/vitejs/vite/blob/27a192fc95036dbdb6e615a4201b858eb64aa075/packages/vite/src/shared/utils.ts#L48-L53 +function withTrailingSlash(path: string): string { + if (path[path.length - 1] !== '/') { + return `${path}/` + } + return path +}