提交 aa8b7779 编写于 作者: fxy060608's avatar fxy060608

fix(h5): serve static file (#3201)

上级 25192ba9
......@@ -32,9 +32,30 @@ export function parseVueRequest(id: string) {
}
}
const importQueryRE = /(\?|&)import(?:&|$)/
const importQueryRE = /(\?|&)import=?(?:&|$)/
export const isImportRequest = (url: string) => importQueryRE.test(url)
/**
* Prefix for resolved fs paths, since windows paths may not be valid as URLs.
*/
export const FS_PREFIX = `/@fs/`
/**
* Prefix for resolved Ids that are not valid browser import specifiers
*/
export const VALID_ID_PREFIX = `/@id/`
export const CLIENT_PUBLIC_PATH = `/@vite/client`
export const ENV_PUBLIC_PATH = `/@vite/env`
const internalPrefixes = [
FS_PREFIX,
VALID_ID_PREFIX,
CLIENT_PUBLIC_PATH,
ENV_PUBLIC_PATH,
]
const InternalPrefixRE = new RegExp(`^(?:${internalPrefixes.join('|')})`)
export const isInternalRequest = (url: string): boolean =>
InternalPrefixRE.test(url)
export const queryRE = /\?.*$/
export const hashRE = /#.*$/
......
import fs from 'fs'
import path from 'path'
import debug from 'debug'
import type { ViteDevServer } from 'vite'
import type { Connect, ViteDevServer } from 'vite'
import { createFilter } from '@rollup/pluginutils'
import {
isImportRequest,
isInternalRequest,
normalizePath,
PUBLIC_DIR,
} from '@dcloudio/uni-cli-shared'
......@@ -34,13 +35,25 @@ export const initStatic = (server: ViteDevServer) => {
}
},
})
server.middlewares.use((req, res, next) => {
// skip import request
if (isImportRequest(req.url!)) {
return next()
const viteServePublicMiddlewareIndex = server.middlewares.stack.findIndex(
(middleware) => {
return (
(middleware.handle as Function).name === 'viteServePublicMiddleware'
)
}
return serve(req, res, next)
})
)
// 替换 vite 自带的 public middleware
if (viteServePublicMiddlewareIndex > -1) {
server.middlewares.stack.splice(viteServePublicMiddlewareIndex, 1, {
route: '',
handle: ((req, res, next) => {
if (isImportRequest(req.url!) || isInternalRequest(req.url!)) {
return next()
}
return serve(req, res, next)
}) as Connect.NextHandleFunction,
})
}
}
export function createPublicFileFilter(base: string = '/') {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册