Skip to content

Commit

Permalink
fix: resovedUrls is null after server restart (#14890)
Browse files Browse the repository at this point in the history
  • Loading branch information
patak-dev authored Nov 7, 2023
1 parent b6b382c commit bd4d29f
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 12 deletions.
21 changes: 17 additions & 4 deletions packages/vite/src/node/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,10 @@ export interface ViteDevServer extends AsyncDisposable {
* Open browser
*/
openBrowser(): void
/**
* @internal
*/
_setInternalServer(server: ViteDevServer): void
/**
* @internal
*/
Expand Down Expand Up @@ -393,7 +397,9 @@ export async function _createServer(

let exitProcess: () => void

const server: ViteDevServer = {
const devHtmlTransformFn = createDevHtmlTransformFn(config)

let server: ViteDevServer = {
config,
middlewares,
httpServer,
Expand Down Expand Up @@ -429,7 +435,9 @@ export async function _createServer(
})
})
},
transformIndexHtml: null!, // to be immediately set
transformIndexHtml(url, html, originalUrl) {
return devHtmlTransformFn(server, url, html, originalUrl)
},
async ssrLoadModule(url, opts?: { fixStacktrace?: boolean }) {
if (isDepsOptimizerEnabled(config, true)) {
await initDevSsrDepsOptimizer(config, server)
Expand Down Expand Up @@ -570,6 +578,11 @@ export async function _createServer(
return server._restartPromise
},

_setInternalServer(_server: ViteDevServer) {
// Rebind internal the server variable so functions reference the user
// server instance after a restart
server = _server
},
_restartPromise: null,
_importGlobMap: new Map(),
_forceOptimizeOnRestart: false,
Expand All @@ -578,8 +591,6 @@ export async function _createServer(
_shortcutsOptions: undefined,
}

server.transformIndexHtml = createDevHtmlTransformFn(server)

if (!middlewareMode) {
exitProcess = async () => {
try {
Expand Down Expand Up @@ -918,6 +929,8 @@ async function restartServer(server: ViteDevServer) {

// Assign new server props to existing server instance
Object.assign(server, newServer)
// Rebind internal server variable so functions reference the user server
newServer._setInternalServer(server)

const {
logger,
Expand Down
22 changes: 16 additions & 6 deletions packages/vite/src/node/server/middlewares/indexHtml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,29 @@ interface InlineStyleAttribute {
}

export function createDevHtmlTransformFn(
config: ResolvedConfig,
): (
server: ViteDevServer,
): (url: string, html: string, originalUrl: string) => Promise<string> {
url: string,
html: string,
originalUrl?: string,
) => Promise<string> {
const [preHooks, normalHooks, postHooks] = resolveHtmlTransforms(
server.config.plugins,
server.config.logger,
config.plugins,
config.logger,
)
return (url: string, html: string, originalUrl: string): Promise<string> => {
return (
server: ViteDevServer,
url: string,
html: string,
originalUrl?: string,
): Promise<string> => {
return applyHtmlTransforms(
html,
[
preImportMapHook(server.config),
preImportMapHook(config),
...preHooks,
htmlEnvHook(server.config),
htmlEnvHook(config),
devHtmlHook,
...normalHooks,
...postHooks,
Expand Down
9 changes: 7 additions & 2 deletions playground/cli/__tests__/cli.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,15 @@ test('cli should work', async () => {
test('should restart', async () => {
editFile('./vite.config.js', (content) => content)
await withRetry(async () => {
expect(streams.server.out).toEqual(
const logs = streams.server.out.slice(2)
expect(logs).toEqual(
expect.arrayContaining([expect.stringMatching('server restarted')]),
)
expect(streams.server.out).not.toEqual(
// Don't reprint the server URLs as they are the same
expect(logs).not.toEqual(
expect.arrayContaining([expect.stringMatching('http://localhost')]),
)
expect(logs).not.toEqual(
expect.arrayContaining([expect.stringMatching('error')]),
)
})
Expand Down

0 comments on commit bd4d29f

Please sign in to comment.