对 Rollup 的resolveId 钩子原来一直有误解。之前一直不知道为什么一旦有插件有返回值,后续插件的resolveId 钩子就不执行了。我还以为这个钩子全局只执行了一次。我忽略了官网上对于resolveId 的 each entry 描述,原来全局要执行很多次类似的钩子。是我粗心大意了😬

原来在解析代码的过程中,解析代码每遇到一个 import/require 就会调用此钩子,看看有没有其他插件想对加载模块特殊处理的,没有的话就用默认的处理。
一旦有插件实现了这个 resolveId,比较典型的就是 alias 插件,使用@/components 等别名进行导入,就得用alias 插件自己处理路径问题,不然 rollup 无法解析这个路径。

而First 类型插件的熔断机制就是,例如每次遇到mport/require 的路径解析,只需要有一个钩子有返回值,也就是成功解析了,那么后面插件的resolveId 钩子就不会执行。想想也是,也没必要执行后续的了,不然用哪个解析路径也是个问题,要是都返回同一个路径,性能损失也是存在的。
 
 
Back to Top