From 45d8bf4da234f73badcf47e574e1e3ee3dc55b6c Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 25 Jan 2021 17:07:45 -0500 Subject: [PATCH] feat: allow speicfying ssr entry directly via build.ssr option --- packages/vite/src/node/build.ts | 4 +++- packages/vite/src/node/cli.ts | 8 -------- packages/vite/src/node/ssr/ssrModuleLoader.ts | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 728f97b41df344..6fdbf2bb42ab91 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -155,7 +155,7 @@ export interface BuildOptions { * Produce SSR oriented build. Note this requires specifying SSR entry via * `rollupOptions.input`. */ - ssr?: boolean + ssr?: boolean | string /** * Generate SSR manifest for determining style links and asset preload * directives in production. @@ -291,6 +291,8 @@ async function doBuild( const resolve = (p: string) => path.resolve(config.root, p) const input = libOptions ? resolve(libOptions.entry) + : typeof options.ssr === 'string' + ? resolve(options.ssr) : options.rollupOptions?.input || resolve('index.html') if (ssr && typeof input === 'string' && input.endsWith('.html')) { diff --git a/packages/vite/src/node/cli.ts b/packages/vite/src/node/cli.ts index 5ff5b56c74709a..849e02a9a53146 100644 --- a/packages/vite/src/node/cli.ts +++ b/packages/vite/src/node/cli.ts @@ -134,14 +134,6 @@ cli const { build } = await import('./build') const buildOptions = cleanOptions(options) as BuildOptions - if (buildOptions.ssr) { - buildOptions.rollupOptions = { - ...buildOptions.rollupOptions, - input: (buildOptions.ssr as any) as string - } - buildOptions.ssr = true - } - try { await build({ root, diff --git a/packages/vite/src/node/ssr/ssrModuleLoader.ts b/packages/vite/src/node/ssr/ssrModuleLoader.ts index eddf4debd060ea..4224452d24d763 100644 --- a/packages/vite/src/node/ssr/ssrModuleLoader.ts +++ b/packages/vite/src/node/ssr/ssrModuleLoader.ts @@ -41,7 +41,7 @@ export async function ssrLoadModule( (await transformRequest(url, server, { ssr: true })) if (!result) { // TODO more info? is this even necessary? - throw new Error(`failed to load module for ssr: $${url}`) + throw new Error(`failed to load module for ssr: ${url}`) } const isExternal = (dep: string) => dep[0] !== '.' && dep[0] !== '/'