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