Skip to content

Commit 6a5a5b5

Browse files
authored
feat: ssr build using optimized deps (#8403)
1 parent e784365 commit 6a5a5b5

File tree

4 files changed

+33
-19
lines changed

4 files changed

+33
-19
lines changed

packages/vite/src/node/build.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ export function resolveBuildPlugins(config: ResolvedConfig): {
306306
pre: [
307307
...(options.watch ? [ensureWatchPlugin()] : []),
308308
watchPackageDataPlugin(config),
309-
...(!isDepsOptimizerEnabled(config) || options.ssr
309+
...(!isDepsOptimizerEnabled(config)
310310
? [commonjsPlugin(options.commonjsOptions)]
311311
: []),
312312
dataURIPlugin(),
@@ -402,7 +402,7 @@ async function doBuild(
402402
external = await cjsSsrResolveExternal(config, userExternal)
403403
}
404404

405-
if (isDepsOptimizerEnabled(config) && !ssr) {
405+
if (isDepsOptimizerEnabled(config)) {
406406
await initDepsOptimizer(config)
407407
}
408408

packages/vite/src/node/optimizer/index.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -610,13 +610,23 @@ export function getOptimizedDepPath(
610610
)
611611
}
612612

613+
function getDepsCacheSuffix(config: ResolvedConfig): string {
614+
let suffix = ''
615+
if (config.command === 'build') {
616+
suffix += '_build'
617+
if (config.build.ssr) {
618+
suffix += '_ssr'
619+
}
620+
}
621+
return suffix
622+
}
613623
export function getDepsCacheDir(config: ResolvedConfig): string {
614-
const dirName = config.command === 'build' ? 'depsBuild' : 'deps'
624+
const dirName = 'deps' + getDepsCacheSuffix(config)
615625
return normalizePath(path.resolve(config.cacheDir, dirName))
616626
}
617627

618628
function getProcessingDepsCacheDir(config: ResolvedConfig) {
619-
const dirName = config.command === 'build' ? 'processingBuild' : 'processing'
629+
const dirName = 'deps' + getDepsCacheSuffix(config) + '_temp'
620630
return normalizePath(path.resolve(config.cacheDir, dirName))
621631
}
622632

packages/vite/src/node/plugins/resolve.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ export interface InternalResolveOptions extends ResolveOptions {
8989
export function resolvePlugin(baseOptions: InternalResolveOptions): Plugin {
9090
const {
9191
root,
92+
isBuild,
9293
isProduction,
9394
asSrc,
9495
ssrConfig,
@@ -266,7 +267,7 @@ export function resolvePlugin(baseOptions: InternalResolveOptions): Plugin {
266267
!external &&
267268
asSrc &&
268269
depsOptimizer &&
269-
!ssr &&
270+
(isBuild || !ssr) &&
270271
!options.scan &&
271272
(res = await tryOptimizedResolve(depsOptimizer, id, importer))
272273
) {
@@ -668,7 +669,7 @@ export function tryNodeResolve(
668669
exclude?.includes(pkgId) ||
669670
exclude?.includes(nestedPath) ||
670671
SPECIAL_QUERY_RE.test(resolved) ||
671-
ssr
672+
(!isBuild && ssr)
672673
) {
673674
// excluded from optimization
674675
// Inject a version query to npm deps so that the browser
@@ -682,7 +683,6 @@ export function tryNodeResolve(
682683
}
683684
}
684685
} else {
685-
// TODO: depsBuild
686686
// this is a missing import, queue optimize-deps re-run and
687687
// get a resolved its optimized info
688688
const optimizedInfo = depsOptimizer.registerMissingImport(id, resolved)

packages/vite/src/node/server/index.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -320,18 +320,7 @@ export async function createServer(
320320
},
321321
transformIndexHtml: null!, // to be immediately set
322322
async ssrLoadModule(url, opts?: { fixStacktrace?: boolean }) {
323-
if (!server._ssrExternals) {
324-
let knownImports: string[] = []
325-
const depsOptimizer = getDepsOptimizer(config)
326-
if (depsOptimizer) {
327-
await depsOptimizer.scanProcessing
328-
knownImports = [
329-
...Object.keys(depsOptimizer.metadata.optimized),
330-
...Object.keys(depsOptimizer.metadata.discovered)
331-
]
332-
}
333-
server._ssrExternals = cjsSsrResolveExternals(config, knownImports)
334-
}
323+
await updateCjsSsrExternals(server)
335324
return ssrLoadModule(
336325
url,
337326
server,
@@ -755,3 +744,18 @@ async function restartServer(server: ViteDevServer) {
755744
// new server (the current server) can restart now
756745
newServer._restartPromise = null
757746
}
747+
748+
async function updateCjsSsrExternals(server: ViteDevServer) {
749+
if (!server._ssrExternals) {
750+
let knownImports: string[] = []
751+
const depsOptimizer = getDepsOptimizer(server.config)
752+
if (depsOptimizer) {
753+
await depsOptimizer.scanProcessing
754+
knownImports = [
755+
...Object.keys(depsOptimizer.metadata.optimized),
756+
...Object.keys(depsOptimizer.metadata.discovered)
757+
]
758+
}
759+
server._ssrExternals = cjsSsrResolveExternals(server.config, knownImports)
760+
}
761+
}

0 commit comments

Comments
 (0)