try {
await handleHMRUpdate(file, server)
} catch (err) {
({
type: ‘error’,
err: prepareError(err)
})
}
}
})
// 增加文件连接
(‘add’, (file) => {
handleFileAddUnlink(normalizePath(file), server)
})
// 减少文件连接
(‘unlink’, (file) => {
handleFileAddUnlink(normalizePath(file), server, true)
})
监听对应的事件所对应的处理函数在packages/vite/src/node/server/
文件里面。再细节的处理,我们不做说明了,其实里面逻辑是差不太多的,最后都是调用了websocket,发送到client端。
node 依赖类型
依赖类型,其实也就是node_modules下面的依赖包,例如:
这些包属于基本不会变的类型,vite的做法是把这些依赖,在服务启动的时候放到.vite
目录下面,收到的请求直接去.vite下面获取,然后返回。
node 静态资源
静态资源其实也就是我们了解和熟悉的public/下面的或者static/下面的内容,这些资源属于静态文件,例如:
这样的数据,vite不做任何处理,直接返回。
node html
对于入口文件,我们这里暂且只讲单入口文件,多入口文件vite也是支持的,详情可见多页面应用;
// 删减后的代码如下
// @file packages/vite/src/node/server/middlewares/
export function indexHtmlMiddleware(server){
return async (req, res, next) => {
const url = && cleanUrl()
const filename = getHtmlFilename(url, server)
try {
// 从本地读取的内容
let html = (filename, ‘utf-8’)
// dev模式下调用createDevHtmlTransformFn转换html的内容,插入两个script
html = await (url, html)
// 把html的内容返回。
return send(req, res, html, ‘html’)
} catch (e) {
return next(e)
}
}
}
对于入口文件,vite首先会从硬盘上读取文件的内容,经过一系列操作后,把操作后的内容进行返回,我们来看看这个一系列操作:
- 调用createDevHtmlTransformFn去获取处理函数:
// @file packages/vite/src/node/plugins/
export function resolveHtmlTransforms(plugins