Vite 入门以及从 webpack 切换到 Vite 遇到的问题总结,【大牛系列教学

时间:2024-10-11 10:32:34

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