Skip to content

Commit 5865b62

Browse files
committed
feat: make memory files middleware work
1 parent 7a2c5a0 commit 5865b62

File tree

4 files changed

+41
-18
lines changed

4 files changed

+41
-18
lines changed

packages/vite/src/node/build.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@ function resolveConfigToBuild(
555555
return resolveConfig(
556556
inlineConfig,
557557
command,
558-
'production',
559-
'production',
558+
command === 'serve' ? 'development' : 'production',
559+
command === 'serve' ? 'development' : 'production',
560560
false,
561561
patchConfig,
562562
patchPlugins,
@@ -655,10 +655,11 @@ async function buildEnvironment(
655655
'.css': 'js',
656656
},
657657
experimental: {
658-
hmr: server ? {
659-
host: server._currentServerHost!,
660-
port: server._currentServerPort!,
661-
} : false,
658+
hmr: true
659+
// hmr: server ? {
660+
// host: server._currentServerHost!,
661+
// port: server._currentServerPort!,
662+
// } : false,
662663
}
663664
}
664665

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ import {
5454
import { initPublicFiles } from '../publicDir'
5555
import { getEnvFilesForMode } from '../env'
5656
import type { RequiredExceptFor } from '../typeUtils'
57-
import { cleanUrl } from '../../shared/utils'
5857
import type { WebSocketServer } from './ws'
5958
import { createWebSocketServer } from './ws'
6059
import { baseMiddleware } from './middlewares/base'
@@ -81,6 +80,7 @@ import { openBrowser as _openBrowser } from './openBrowser'
8180
import { searchForPackageRoot, searchForWorkspaceRoot } from './searchRoot'
8281
import type { DevEnvironment } from './environment'
8382
import { hostCheckMiddleware } from './middlewares/hostCheck'
83+
import { memoryFilesMiddleware } from './middlewares/memoryFiles'
8484

8585
export interface ServerOptions extends CommonServerOptions {
8686
/**
@@ -913,19 +913,10 @@ export async function _createServer(
913913

914914
// serve static files
915915
// middlewares.use(serveRawFsMiddleware(server))
916-
// middlewares.use(serveStaticMiddleware(server))
916+
// middlewares.use(c(server))
917917

918918
// serve memory output dist files
919-
middlewares.use((req, res, next) => {
920-
const cleanedUrl = cleanUrl(req.url!)
921-
const file = server.memoryFiles[cleanedUrl]
922-
if (
923-
file
924-
) {
925-
return res.end(file)
926-
}
927-
next()
928-
});
919+
middlewares.use(memoryFilesMiddleware(server, false));
929920

930921
// html fallback
931922
if (config.appType === 'spa' || config.appType === 'mpa') {
@@ -940,6 +931,7 @@ export async function _createServer(
940931
if (config.appType === 'spa' || config.appType === 'mpa') {
941932
// transform index.html
942933
// middlewares.use(indexHtmlMiddleware(root, server))
934+
middlewares.use(memoryFilesMiddleware(server, true));
943935

944936
// handle 404s
945937
middlewares.use(notFoundMiddleware())

packages/vite/src/node/server/middlewares/indexHtml.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ import { cleanUrl,
437437
// }
438438
// }
439439

440+
// TODO(underfin): it only used for preview
440441
export function indexHtmlMiddleware(
441442
root: string,
442443
server: ViteDevServer | PreviewServer,
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import type { Connect } from 'dep-types/connect'
2+
import { cleanUrl } from '../../../shared/utils'
3+
import type { ViteDevServer } from '..'
4+
5+
export function memoryFilesMiddleware(server: ViteDevServer, handleHtml: boolean): Connect.NextHandleFunction {
6+
return function viteMemoryFilesMiddleware(req, res, next) {
7+
const cleanedUrl = cleanUrl(req.url!).slice(1) // remove first /
8+
if (cleanedUrl.endsWith('.html') && !handleHtml) {
9+
return next()
10+
}
11+
const file = server.memoryFiles[cleanedUrl]
12+
if (
13+
file
14+
) {
15+
if (cleanedUrl.endsWith('.js')) {
16+
res.setHeader('Content-Type', 'text/javascript')
17+
}
18+
const headers = server.config.server.headers
19+
if (headers) {
20+
for (const name in headers) {
21+
res.setHeader(name, headers[name]!)
22+
}
23+
}
24+
25+
return res.end(file)
26+
}
27+
next()
28+
}
29+
}

0 commit comments

Comments
 (0)