Vite 入门以及从 webpack 切换到 Vite 遇到的问题总结

本文详细介绍了从 Webpack 切换到 Vite 的过程,探讨了 Vite 的工作原理,包括客户端、服务端的主要任务,如文件监听、依赖处理和 HTML 处理。在转换过程中遇到的两个主要问题及其解决方案也被提及,涉及第三方库的缺失和 Babel 配置问题。此外,还分享了前端开发者应该阅读的书籍推荐,以助于技能提升。
摘要由CSDN通过智能技术生成

可以看到,涉及到js的一共三块:

  • client,请求路径为/@vite/client,请注意这个路径,这是vite本身的依赖的路径;

  • react-refresh的模块代码,这是插件react-refresh注入的代码;代码内部又请求了@react-refresh,这是插件react-refresh的sdk的请求;

  • main,请求路径为/src/main/tsc,这是与咱们项目中的真实代码相关的;

除了上面的三个外,还有一个env,请求路径为/@vite/env.js,这个就是@vite/client内部发出的对env依赖的请求:import '/node_modules/vite/dist/client/env.js';;

当然还有@react-refresh的sdk请求;

除了上面所提到的js之外,其他的请求其实就是我们项目代码里面的请求了;

client第一步要做的事情就是建立websocket通信通道,可以看到上面的websocket类型的localhost请求,这就是client与server端通信,进行热更新等的管道。

vite- server

============

说完了client,我们回到server部分,入口文件为packages/vite/src/node/serve.ts,最主要的逻辑其实是在packages/vite/src/node/server/index.ts;我们暂且把server端称为node端,node端主要包含几种类型文件的处理,毕竟这只是个代理服务器;

image.png

我们从几个部分来看看这几种类型的处理

node watcher


watcher的主要作用是对于文件变化的监听,然后与client端进行通信:

监听的目录为整个项目的根目录,watchOptions为vite.config.js里面的server.watch配置,初始化代码如下:

// 使用chokidar进行对文件目录的监听,

const watcher = chokidar.watch(path.resolve(root), {

ignored: [‘/node_modules/’, ‘/.git/’, …ignored],

ignoreInitial: true,

ignorePermissionErrors: true,

…watchOptions

}) as FSWatcher

启动对文件的监听:

// 如果发生改变,调用handleHMRUpdate,

watcher.on(‘change’, async (file) => {

file = normalizePath(file)

// invalidate module graph cache on file change

moduleGraph.onFileChange(file)

if (serverConfig.hmr !== false) {

try {

await handleHMRUpdate(file, server)

} catch (err) {

ws.send({

type: ‘error’,

err: prepareError(err)

})

}

}

})

// 增加文件连接

watcher.on(‘add’, (file) => {

handleFileAddUnlink(normalizePath(file), server)

})

// 减少文件连接

watcher.on(‘unlink’, (file) => {

handleFileAddUnlink(normalizePath(file), server, true)

})

监听对应的事件所对应的处理函数在packages/vite/src/node/server/hmr.ts文件里面。再细节的处理,我们不做说明了,其实里面逻辑是差不太多的,最后都是调用了websocket,发送到client端。

node 依赖类型


依赖类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值