Skip to content

Commit

Permalink
fix: more stable request hold
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Jan 28, 2021
1 parent c3e52f2 commit be0e698
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 7 deletions.
4 changes: 4 additions & 0 deletions packages/vite/src/node/optimizer/registerMissing.ts
Expand Up @@ -2,6 +2,10 @@ import chalk from 'chalk'
import { optimizeDeps } from '.'
import { ViteDevServer } from '..'

/**
* The amount to wait for requests to register newfound deps before triggering
* a re-bundle + page reload
*/
const debounceMs = 100

export function createMissingImpoterRegisterFn(server: ViteDevServer) {
Expand Down
7 changes: 3 additions & 4 deletions packages/vite/src/node/plugins/resolve.ts
Expand Up @@ -45,7 +45,6 @@ function resolveExports(
// special id for paths marked with browser: false
// https://github.com/defunctzombie/package-browser-field-spec#ignore-a-module
export const browserExternalId = '__vite-browser-external'
export const pendingDepId = '__vite-pending-dep'

const isDebug = process.env.DEBUG
const debug = createDebugger('vite:resolve-details', {
Expand Down Expand Up @@ -347,7 +346,8 @@ export function tryNodeResolve(
if (
!resolved.includes('node_modules') || // linked
!server || // build
server._isRunningOptimizer // optimizer resolve
server._isRunningOptimizer || // optimizing
!server._optimizeDepsMetadata
) {
return { id: resolved }
}
Expand All @@ -367,13 +367,12 @@ export function tryNodeResolve(
if (versionHash) {
resolved = injectQuery(resolved, `v=${versionHash}`)
}
return { id: resolved }
} else {
// this is a missing import.
// queue optimize-deps re-run.
server._registerMissingImport?.(id, resolved, importer)
return { id: pendingDepId }
}
return { id: resolved }
}
}

Expand Down
11 changes: 8 additions & 3 deletions packages/vite/src/node/server/middlewares/transform.ts
Expand Up @@ -15,12 +15,12 @@ import { transformRequest } from '../transformRequest'
import { isHTMLProxy } from '../../plugins/html'
import chalk from 'chalk'
import {
CLIENT_PUBLIC_PATH,
DEP_CACHE_DIR,
DEP_VERSION_RE,
NULL_BYTE_PLACEHOLDER,
VALID_ID_PREFIX
} from '../../constants'
import { pendingDepId } from '../../plugins/resolve'
import { isCSSRequest, isDirectCSSRequest } from '../../plugins/css'

const debugCache = createDebugger('vite:cache')
Expand All @@ -45,8 +45,13 @@ export function transformMiddleware(
return next()
}

if (server._pendingReload && req.url!.endsWith(pendingDepId)) {
// missing dep pending reload, hold request
if (
server._pendingReload &&
// always allow vite client requests so that it can trigger page reload
!req.url?.startsWith(CLIENT_PUBLIC_PATH) &&
!req.url?.includes('vite/dist/client')
) {
// missing dep pending reload, hold request until reload happens
server._pendingReload.then(() => res.end())
return
}
Expand Down

0 comments on commit be0e698

Please sign in to comment.