- Published on
vite-1.0模块解析插件解读
- Authors
- Name
- 祝你好运
这个serverPluginModuleResolve
文件也是vite 1.0里面非常重要的一个文件,我们需要仔细分析一下,整体结构如下:
首先说明,这个插件只会处理那些/@modules/
开头的请求,这个开头的都是第三方库,这个步骤是这样:
- 请求一个文件,返回的时候通过[模块重写]修改了import的文件,第三方库都会被加上
/@modules/
- 浏览器加载这个
/@modules/
开头的文件
然后我们就开始分析这个文件,看它是如何把/@modules/
开头的请求映射到具体的模块和文件中,然后返回到response里面的。
伪代码解释
- 判断是否是第三方库开头的文件
- 是否有缓存
- 是否是提前优化过的第三方库
- 能否解析到具体的第三方库,比如
react
(这个例子不恰当,因为react
会被提前优化,大家明白这个意思即可) - 能否解析到具体的第三方库里面的具体文件,比如
import A from 'a/b.js'
这样的 - 打log并返回404
详细解释
1. 判断是否是第三方库
export const moduleRE = /^\/@modules\//

2,3. 判断是否有缓存和是否是优化过的第三方库

注意第42行的ctx.read
是在src/node/server/index.ts
91行bind过的自定义的带缓存的读取方法,它会把读取到的结果赋值到ctx.body
上。
4,5. 解析到第三方库或第三方库中的文件
我们首先要看下这里的importer
的判断,它是需要检查Referer的。

然后就是尝试解析为第三方库或者第三方库中的文件 

6. 最后的检查和收尾
其实我觉得87行的这个检查可以放到上面调用的那个
resolveNodeModuleFile
里面,这样可以封装具体的解析,不管是不是软连接,外界只要调用就行了,不用关心解析的细节。 