理解插件|青训营

67 阅读2分钟

为什么要有插件

涉及一些架构的工具。包括vs code等等,知名的工具都会有一个所谓的发现架构需要设计,原因就在于能提升整个应用的扩展性。

比如说在微信里面,主流程非常非常复杂。一个工具假如一个新人,要去学着去改这个工具的代码。他就得了解很多很多的细节,上手成本很高。然后功能本身也会很难迭代。如果每一次要改一点,都必须进入到这个无巨无霸的内部。成本很高,后期的测试成本也会很高。作为一个开源项目来说,没有人愿意参与进来贡献,因为太复杂了,那么久的源码,才能去做一点点事情。

插件的精髓就在于:只做最核心的那一部分,但是通过开放一系列的扩展方式修改方式,可以在这一个开放的修改方式里面用开放的这种修改方式去改网的功能。也简单的说,就是把主流程全部打好。那剩下的事情,可以改细节,可以直接在仓库里面改,不需要动代码。插件的精髓是一个对扩展开放对修改封闭的一种。

dashboard插件作用:就是把整个编译过程的信息用一个特别好看的结果给输出出来。

写一个插件很复杂。首先,插件的钩子:就是在下面这一段代码里面,有一个compiler点, Combination在一段长长的调用这一个的就是一个公司。某种程度上可以理解为一个事件。运行到某一个过程的时候,触发一下这个事件。这个事件会比普通的浏览器或者是普通的写代码的时候的事件。会复杂一点,这一点是首先这个事件是什么时候触发的,也就是说这个钩子它所发生的时机。

这compiler的Compilation。理解为一个入口的对象。然后这个compiler有一个discrimination的Hawk的hook是一个think hook的实例,代表前面的实力里面的这一个的供应。在一个new combination的函数被调用的时候就会触发这个discrimination。但是unwrapped每次重新编译内容的时候就会触发这个钩子,这个钩子它会传入包括一个termination对象。这个空白nation对象就是每一次编译的一个上下文实例,分配实例。这是第二个关键点,上下文,也就是参数,

每一个钩子,它所传递的参数其实是不一样的,所以这一点也是一个复杂的点。