00:00
来继续观看上硅谷和技术视频这节课我们继续通过代码的方式给大家演示一下gra生命周期中所涉及到的11个钩子函数,以及他们的执行顺序问题。首先我们看一下项目的目录结构。下面的木质结构就是在根工程底下有三个子工程。就是这个在跟工程底下有sub product010203这样三个子工程。那接下来我们就通过代码的方式给大家演示一下,这是一个钩子函数,以及他们的执行顺序。来。首先这些代码咱们已经给大家提供好了。啊,就免得咱们在课上再敲,浪费时间。首先我们在跟工程的settings这文件里边先添加这是一个钩子函数,这些钩子函数咱们都是按照顺序给大家编写的。我们拿过来。把它放在跟工程的3D性字节轨度文件里边。首先这11个钩子函数,咱们先看在初始化节段执行的这两个,初始化阶段执行的这两个分别是settings evaluated和product loaded。
01:08
就这两个钩子函数啊,而且我们在每个钩子函数内部都输出了当前钩子函数的函数名。比如说settings evaluated的里边就输出了当前函数名,还有这个啊。后边。也是这样的。再一个,当初始化阶段执行完了之后,它会进入到配置阶段。在配置阶段它会执行各个。工程的构建脚本。在执行每个工程构建脚本之前,它会执行啊product,对象的before evaluate和对象的before product这两个估值函数。所以咱们这里还有before evaluate和。After evaluate以及before product和after product这四个钩子函数啊,分别对应的就是各个构建脚本执行之前的这两个钩子函数,以及各个构建脚本执行之后的这两个钩子函数。
02:09
而且在这里我们要提一下,像before evaluate和after evaluate必须放在监听器中。所以咱们这里添加了一个监听器。啊,把before evaluate和after evaluate放在监听器内执行。再一个咱们在执行before evaluate的时候啊,我们获取了一下当前product名字。当前product有可能是根工程的,也可能是子工程的这个product名,然后取出来之后赋值给一个变量,这个变量主要是在下边执行before product和after product。就执行before product和after product这两个公子函数的时候会使用的。OK啊,接着。它会执行根工程以及各个子工程的这四个钩子函数,这些执行完了之后,它会啊在执行grid对象的products evaluated这个钩子函数。
03:09
是吧?实行这个钩子函数的时候,咱们也会让他输出一下跟工程的名字,然后接着它会执行task gra的问ready这个钩子函数。那个。这样配置阶段就会执行完毕。在配置阶段执行完毕之后,它会根据配置阶段生成的task的有效无关数依次执行那些task。执行每个task之前,它会执行一个before task。钩子函数。啊,然后再执行。每个task。执行每个task的执行行为。然后再会执行。Task对象的after task这个钩子函数就这个。等所有的task执行完毕之后,它会执行grid对象的build finish的这个钩子函数。
04:01
OK啊,这是生命周期中所涉及到11个钩子函数。行。当然,在执行这些钩子函数的时候,它也会执行T格的配置段和。这些task的行为,所以啊,咱们这里再加一些task,比如说我们在跟工程build grid文件里边再给我加一个task。来。在根工程的build文件中加这个task。在这个task里边有配置片段,还有配,还有这个任务的片段,还有任务的行为。我们都知道任务的片段啊,或者说任务的配置阶段是在配置阶段执行,而任务的行为呢,是在执行阶段执行。有任务的行为是在执行阶段执行。接着我们在summer product01的构建脚本里边也添加一个task,叫task b。同时他这个B也有。
05:01
啊,这个任务片段。还有啊,任务的行为。同时我们再找到sub product02,在sub product02的构建脚本里边再添加一个task c和D。然后我们在这里是把task c放在上面的,Task d是放在下面的,按理说它会按照从上到下的顺序解析,但是由于task c依赖了task d,所以在执行task c之前,它会执行task d。OK啊,这样咱们的代码就添加完毕,添加完毕之后啊,咱们执行一下task c。在执行某个task的过程中,它会啊。涉及到项目的整个生命周期啊,涉及到生命周期的三个阶段,每个阶段都有一些对应的钩子函数,咱们看看咱们执行这个task c这个任务的时候。
06:02
输出的。这些啊。钩子函数的顺序是不是和咱们图上画的这个是一致的?C。首先我们看看在初始化阶段,它确实执行了settings evaluated和products对象products的loaded。这两个估子函数。这样,初始化阶段执行完毕之后,它会进入到配置阶段,在配置阶段,它依次会执行各个工程的构建脚本。在每个工程的构建脚本执行之前,会执行两个钩子函数来我们看,首先它会执行跟工程的。这个构建脚本在根工程里边,它会先执行这两个工资函数,然后执行根工程里边的。这个构建脚本以及啊task配置段。就谁呀,就是根工程里边的。这个task配置段叫TASK1,没有问题。
07:04
然后他会在执行这个脚本之后会执行。啊,会执行这个product对象的after evaluate和grid对象的after product这两个估值函数也是没有问题的。也是没有问题的,接着他又会执行各个子工程,比如说S01。啊。以及sub productct02。是吧,OK啊,没有问题。没有问题啊。然后执行各个子工程的这些构建脚本,顺带着执行它们对应的钩子函数,这些也都是没有问题的啊,0102。这里之所以咱们看到的是这个,是因为它这个控制台有问题,然后咱们再来执行一遍。你再看。
08:00
GCY。我们看一下。他确实执行了。首先是初始化阶段,两个工函数,然后是根工程的,然后是S010203。啊,然后执行每个。在配置页的执行这些根工程及根工程底下各个子工程的时候,它执行了。Before evaluate和before product以及after evaluate after product这四个公司函数。然后这些。各个根工程。啊,构建脚本执行完毕之后,它会行great对象的products evaluate和when ready这两个钩子函数,所以你会往下走,往下走你会发现它最后会执行product evalu的和为ready这两个估值函数。然后进入到。Task的执行阶段,执行阶段他就按照task的。
09:04
这个有效无环数啊,在每个在执行每个task之前会执行一个before task,然后执行每个task之后执行一个after task,然后依次把所有的task执行完毕。所以啊,他先执行了task和C所依赖的task和D,在执行task和D之前,先执行了before task,然后执行task和D的行为。然后又执行了task。然后又执行了这个after task这个钩子函数。然后。最后执行了是task c是吧?Task c执行之前也是执行了对应的钩子函数,执行之后也执行了对应的钩子函数,当所有的task执行完毕之后,它会执行啊。这个grade对象的build finish的这个钩子函数。没有问题。这就是GR斗争生命周期中所涉及到的11个钩子函数,以及他们的执行顺序。
10:02
啊,其实就是这张图,这样咱们就给大家通过代码的方式演示了一下。
我来说两句