export function indexHtmlMiddleware( server: ViteDevServer): Connect.NextHandleFunction { return async (req, res, next) => { // 抹除 query 信息 和 hash 信息的纯 url const url = req.url && cleanUrl(req.url) // spa-fallback always redirects to /index.html // 如果请求的是 html 资源,同时 header.sec-fetch-dest 不是通过 script 发起的资源请求,则处理并返回 if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') { const filename = getHtmlFilename(url, server) if (fs.existsSync(filename)) { try { let html = fs.readFileSync(filename, 'utf-8') html = await server.transformIndexHtml(url, html) return send(req, res, html, 'html') } catch (e) { return next(e) } } } next() }}