00:01
接下来呢,我们要学习的就是如何注册boos,就说如何注册咱们的世界。我们来学习这个。那么要学习这个之前呢,我们还是需要掌握咱们有哪些护,我们有compil的护士,也有compilation的护士,那么在这些文档中都告诉你呢,怎么注册啊,首先找到这个对象,找到对象上面这个属性叫whose死。然后呢,再去点你某个户OOK,然后接下来你根据这个户口的类型是同步还是异步的调用相应的点ta,或者点ta think或者点ta promise的方法去注册事件,注册事件的时候你要传你当前的插件名称和世界要执行的回调函数。那么回调函数的参数就要看你具体的某个时间它会给你传什么参了。举个例子,我们往下走,首先出发的是environment这个,呃,这个事件,那么从这里可以知它是think,也就是说它是个同步钩子,同步公子,那么我们注册就必须要tab去注册,来,我们可以演示一下,这是第一个啊。
01:12
整个流程呢,就是在这里通过compare了对象。Whose?然后找到你要注册的某个户。然后点tab或者是table,但是因为它是同步对吗?由文档可知。Environment是同步构词,所以需要使用tab注册。就这么简单好,注册的时候第一个参数是自己的插件名称。第二个是插件要执行的一个回调函数。而回调函数的参数就在这里看啊,如果他这啥也没写,就没有参数。比方说在这个entry point options option,那么可以看到它有两个回调函数的参数,所以我们在定义回调函数的时候,可以写这两个参数,没有参数就代表它没有参数,没有写啊,就代表它没有参数。
02:12
好,我们这里可以说是的,这个environment和它被触发了。好,这个钩子会自动的执行啊,我们只要运行它会自动的打印的。哎,你看。因为这个是一上来就要触发的,所以它这个打印时机是很快的。好了,那么剩下的都是这样做啊,那么我们就不全部去测试了,我们挑几个我们后面会用上的,比如说这个。Emit呢是一个异步series,异步库呢,代表异步series是叫做创行的异步创新,意思就是将来呢,我们可以往emit里面定义多个钩子函数。他们的执行顺序永远都是123顺序执行,哎,我们可以用一下这个方法。
03:00
它是在资源输出到output,也能输出到我们的第目录之前执行,所以我们想要往里面追加资源最少。最晚啊,可以在emit里面做,因为拿到it之后他就来不及了,因为已经输出了。我们可以注册一个这样的钩子,comp.whose。再点这个it,那么它这个异步的钩子,所以我们可以考虑用各种方式,可以用tab注册。三那么tap注册的话呢,我只能做同步操作啊,就不能做异步操作了。然后呢,它的回调函数的参数呢,就是compilation对象。好,呃,同时我们再给大家玩一玩啊,还有think。
04:02
Sa的话呢,它会自动的在参数中后,最后的参数会多一个参数叫call back。当call back调用呢,代表他这个钩子才算执行完毕了。是这样的,所以我们可以去做异步操作。对吧,等一号做完我们再调back,那么它才会继续往下执行。哎,我们可以这样写。然后呢,还有一种promise的写法。异步钩子呢,有三种形式啊,Promise写法,那么一样的promise呢,没有第二个参数啊,它要求返回一个promise对象。帕米C,现在状态决定这个操作到底干成功还是干失败,Resolve就成功,Reject就失败,但咱们目前只考虑成功啊,所有呢可以聊。中间我搞长一点。
05:00
那么由图可知啊,我们可以看到就是注册了给咱们世界呢,是多个世界是可以注册咱们的emit呢,户口是可以注册多个事件的。那么他们注注册的执行顺序呢?因为我是异步串行,所以他们是从上到下依次执行。必须先执行完一才能执行二,等二执行完了才能执行三。所以我们大仔细观察它打印顺序,而只有一二三都执行完毕,那么ipad才会继续往下编。好,直行一等两秒,直行二等一秒直行三,诶这时候再全部编译完成,所以完全没问题。所以这是这个异步的创新钩子啊,大概的一种写法。它有三种方式啊,三种方式,那么注意这个上面这种呢,如果你做异步操作的话,它是不会等的啊,所以我们用tab去注册异步钩子的话,那么我们不能去做异步操作。
06:00
好,这是异步串行,除了异步串行以外,还有异步并行。当然我们要找一下,诶,Make就是异步并行的一个钩子。钩子注册呢,不一定要在顺序注册,你想在哪注册就在哪注册,它最终调用的时候会按照一定的顺序去执行的。好,前面我们已经演示过了,那么我喜欢用table think的形式,所以我后续都用这种形式去注册一步钩子了。那么make方法接收到参数也是compilation。然后呢,它是一个异步的并行钩子。这是异步的创新工作。也就是说他可以做一步操作,但是多个这个一步操作呢,它必须要顺序执行。
07:08
那么这里呢,我们知道它是一个异步。变形的钩子。就是这个啊,A think parallel。而think series部分呢,就是呃一步创新工通。好,我们来写啊。Tobet。那么我就简单写一写了。比如说他这里三秒执行这个make阶段,他打一个一。好,然后呢,我把这钩子呢,来三个也意思一下。那么这里是二二时间呢,我短一点。
08:02
对,三三时间呢,我也就两秒。好,异步并行钩子呢,你可以理解为这个回调函数一上来全都触发。全都出发。那么谁先做完?谁就先调用呗。啊,他们一上来就全部同时去干啊,同时干就这样的。所以你能发现就是他们的打印顺序。231看到没有,因为231,为什么呢?他大概意思就是。三个键是同时干,所以过了一秒钟先打一二,再过一秒打一三,再过一秒打一,它是这样的一个串写同时干。不是不是这样,不是说什么二干完之后等两秒才干三啊不是这样的,是他们同时干,然后一秒之后,哎,打印二再一秒再打印三,再一秒再打一是这样的一个情况。第一步,并行的就是他们可以同时干这些事,但是同样的,要等他们全部干完才能继续往下走。好,我们主要给大家演示一下这些钩子用法,当然还有一些别的类型,但别的类型呢,我们基本用不上。
09:06
那么有兴趣的大家可以查一查这个ta这个文档,那么它有很多种用法。但是我们现在只需要关心我们用上的一些内容就好了。对吧,好,呃,这里呢,我们介绍了compile对象,它怎么去挂载钩子啊,那么compilation对象呢,也可以挂载,我们接下来也可以去操作,在这个emit方法中呢,我们可以得到的compilation这行了,Compilation也可以挂在扣子。那么它要挂的什么钩子,我们也要看一下comp上面有什么钩子,它上面也有很多很多钩子,同样的点开这个钩子呢,它会告诉你是同步还是异步的。比方我们定义这个C啊,它是它这个即将封装之前啊,模块即将封装之前掉的那个钩子函数。So法还是点某个钩子,然后点,因为它是同步钩子,所以点tab。那么参数还是一样,第一个是我们的这个插件名称。
10:02
第二个是一个这个事件要执行的一个回调函数,然后呢,这里没有参数,所以咱们就没有参数了。我们注册好世界的时候呢,并不是说他打印完MISS1接下来就打印这个C,并不是这样的,而是他打,当他满足一定的条件才会执行。呃,我们这个注册可能有点晚啊,他这个不一定会执行啊。我们这个注册时机,我们看一下应该会比较晚,太晚。来我们往上走呢,我会发现就是这个C呢,并没有打印,原因就是我们前面说过看的那个那个图。呃,在上面。他是在make方法的时候才去创建compilation的,而在after compile的时候,Compilation的所有操作都已经做完了。
11:05
全都已经做完了,那么他都已经做完了,你这个时候去,呃,在这个em Miss这里去注册世界,那都你做完了,他他不会往回头走啊,这个回头走没法走,他只会顺序执行,所以这时候你注册世界相你白注册了,所以我们要想执行,必须要在make的时候去注行,至少要在make的时候执行注册啊。所以这个注册呢,我至少要在Mac里面注册它才可能有有效果。否则是一定没有效果的。OK。所以这里要注意啊,需要在compilation钩子函数。触发前注册啊。好,这个时候我们再打包。
12:03
哎,你看四就出发了。好了,呃,那我就不一一演示了,那么comp的注册钩子呢,也是这样注册的,Comp也是这样注册的,只要我们注册了这个钩子,它就会在相应外派执行的阶段的时候就会调这个钩子,那么我们就会在这里面干一些我们想做的事情。好了,这节呢,我们就是研究啊,咱们的钩子函数如何注册,以及不同的钩子函数又是怎么注册的,Comp怎么注册,Compilation又是怎么注册。对吧,同步一步要怎么做,那么现在相信大家已经有答案了。那么大家呢,可以看着那个文档,自己可以多挑一些钩子函数,可以去注册看看它的一些情况。
我来说两句