00:01
下面我们来介绍插件plug。插件的概念呢,就是可以扩展ipad功能。在里面呢,加入一些自定义的一些构建行为,从而使。执行更广泛的任务,拥有更强大的构建能力。那么到底是怎么工作的呢?我们可以解释一下。当WiFi编译的时候啊,它呢,内部就像一条流水线一样。那么它会在里面有N个阶段,不同阶段会干不同的操作啊,就是里面是像流水线一样会一直在干活,而且就是从头到尾这样去干活。好,那么在这个不同阶段做的话呢,插件干嘛呢?插件就是通过插入到某一个阶段来执行特定的一些事情。从而改变咱们整个微派打包的时候的一些一些情况。比方说我在一开始的时候,我会插入一个插件,然后可以做一些事情,在中间的时候也会插入个插件做一些事情,在结尾的时候也会插入插件做一些事情。总而言之,插件就是一种。
01:06
这样的机制。就是插入到生产线中,然后在特定时机内,Ipad会自动的执行插件的内容,那么我们可以去完成一些事情,从而改变整条生产线的一个运作。那么这个插入的过程呢?这里我们要介绍一个东西,叫top钩子事件。那么在执行过程中呢,会触发一系列的T钩子事件,而插件要插入的话呢,就需要找到某一个钩子事件往里面去注册事件,这样呢,当WiFi在执行的时候,就会自动的触发我们插件注册的这个事件呢。好,那钩子是什么呢?钩子的本质就是一个世界。那么再说通俗一点,如果你学习过那个view的话,你知道view有生命周期。运用生命周期函数,比方说它在初始化的时候,它有before before mount和mounted。
02:06
对吧,所以在每次初始化的时候,它永远会触发那四个四个函数。而我们也是,只是它更多一点,它有30多个,甚至如果你包含咱们的这个comp啊,加在一起有五六十七,五六十个以上的构子函数。别说,他每次都会从上到下这样依次执行这些钩子函数。我们要做的就是在某个函数中做一些特定的事,那么就可以完成我们想做的操作了。然后这个做的过程,它我们需要做的是要注册失禁。他会把这些事件给暴露出来,然后呢,我们通过注册这些事件就可以去完成插件功能了。那么它底层呢,注册世界的方式都是通过他去实现的,它是PA的一个核心功能库。它内部提供的这十种同步异步的不同种类的钩子,那么大家有兴趣可以自行查阅一下。
03:03
这里呢,我们就不多去扩展了,因为我们只要知道它的一个大概的内容就好了。我们更重要的,因为这是它的底层啊,我们更重要知道它是怎么去注册世界,怎么使用的,所以下面这个方法是必须要掌握的。Tab type和type,因为钩子有同步钩子,也有异步钩子,所以我们通过tap方法既可以注册同步,又可以注册异步钩子。那么为什么ta又可同步有异步呢?因为假设我注册这个异步钩子,那么将来我注册事件的时候,有可能我在异步钩子中操作的时候,不一定一定有异步操作,也可能有同步操作,也可能只有同步操作,所以这个时候我会用tab去注册这个异步钩子。那么如果我要做异步操作的话,那就必须要用type s或者type来注册这个异步扣子。他们的,他们的确啊,不,呃,这个不同点就是type是回调函数的方式,Type promise是promise形式。
04:06
所以如果我们要注册同步钩子,只有一种方式,Tab,如果要注册异步钩子的话,如果异步钩子里面只有同步操作,也可以用tab来做,如果异钩子他必须要做异步操作,那么就要用下面两种方式中的一种。好,具体怎么用呢?后面我们去定义差距的时候都会大家演示的。除此之外呢,我们还必须要关注两个对象,Compile对象和compilation对象。这两个对象呢?灌输着,贯穿着整个构建的过程,我们定义插件永远都离不开这两个对象的一些操作。其中compiler对象呢?它保存的PE的所有配置。打包的所有内容都可以在comp中找到。每次启动ipad,都会创建一个独一无二的comp,而且仅仅只有一个。整个创建过程只有一个对象。
05:00
在我们创建派启动ipad的时候,它立马会创建。这上面会包含所有外派的配置,我们订的load插件。咱们的入口、输出模式等等都可以通过对象获取到。它上面有很多很多属性啊,这里我们就介绍,比如说它有options属性,可以获取到compel了对象的上面的所有配置,也就外派中所有配置。然后呢,还有什么input file system和output file system,这两个呢,相当于note的FS操作,一个是输入,一个是输出。也就是说,我们要往它里面追加文件,可以考虑input file system,如果我们要输出文件,可以考虑file output。这个file system。那么我们也应该啊,如果要在插件中进行文件操作,尽可能的使用这两个方法,而不是用FS。同时我们要去往咱们的comp对象中去注册钩子,也说我们要往外派里面注册钩子,其实就是往compel对象或者是compilation对象去注册钩子,而他们注册钩子的方法呢?
06:09
对象呢,都在这个户上面,我们可以往里面去注册钩子。那么有哪些钩子呢?我们可以看一下。它有很多啊,Environment after等等等等,从上到下一共有这么多个钩子。这些都属于compare了对象的钩子函数。那么也就是说,我们在创建插件的时候,我们都会往这里面去注册事件。那么每个钩子都在不同阶段出发,他们大概的顺序就是这样,从上到下的。好,我们再再去看啊。除此之外呢,我们创建过程中还有comp对象,Comp对象代表对多资源的一次构建。它可以访问到这个所有模块和他们的依赖,比方说我们入口JS文件打包进来,那么他就会启用comp去对这个入口资源的内容做一些各种处理,它包含这个依赖中的所有模块。然后。
07:06
然后使用comp的方式去对他进行编译,编译的过程中会对模块进行各种操作,加载资源啊,封存啊,优化啊,分化啊,哈希啊等等做各种操作。总而言之,就是我们可以理解为PA的一个大包流程,就是它首先会创建comp。然后把外派的所有东西都挂载到comp对comp上,然后开始运行,这个时候会触发comp的对象中的一些钩子函数ABCDEG触发很多个。好,出发的过程中呢,这个时候他在某一个阶段就会创建comp对象,这时候代表我要处理资源了。那么资源的具体处理呢?都是在compil中去完成的,所以comp中就会对这个资源做各种各样的处理。好处理完之后呢,那么如果还有其他的入口,比如我是多入口,那么这时候又会进来,又对他进行各种福利。对吧,择之它会com呢,会触发N次,如果你有多种资源,或者是不同的资源,比如说C资源或者图片资源,它会触发N次。
08:07
那么compile了,永远只有一个。根据你资源的一个情况,可能有多个。那么每个对应的就是某个资源或者某一块资源。那么com上面呢,也有很多whos啊,还可以访问到你当前的所有资源和一些啊module和串的一些情况,那么它的构子函数呢,会相对来讲会更多一点啊,比起这个comp来讲可能更多一点,因为comp代表对资源的共建,外派D主要就是要做这个事。所以这个过程中有很多阶段、很多流程会很复杂。那么还是一样啊,这个阶段的流程的内容我们并不需要全部关心,后续呢,我们会讲几个主要的护子函数,大家主要关注这几个就好了,其他的呢,我们暂时都用不上。如果你想关注这个钩子干什么的,在外派官方文档中都有介绍它是在什么时候出发的,那么在这里大概能干什么,以及它有什么参数。
09:08
好,回到前面啊,我们这里呢,就大概了解到了一些新情况,下面呢,我们还提供了一张图来告诉大家ipad到底是怎么执行的。当我们去执行外派指定的时候,它首先会创建这个compel对象。创建好comp对象之后呢,开始执行comp对象的一些。第四,执行,当然了,我这里只列举了某一些啊,没有全部列举好,当它执行到这个make方法的时候。这个时候就会开始创建,开始要对资源进行编译了,那么就会创建comp对象,然后呢,Comp里面会调用comp公司函数对咱们的资源做各种处理。当资源全部处理完之后呢,他又会返回到咱们的这个comp对象中,接着往下执行后面的剩下的钩子,直到把所有内容都处理完了之后,他会把处理好的所有资源通过方式,通过这个钩子函数把输输出到咱们的地层弄下去,最终完成咱们整个打包构建。
10:11
好,这个make,这个过程中,可能这个过这个对象可能会创发创建N次。直到他全部走完之后,然后呢,咱们的对象才接着往下走。所以我们可以认为啊,咱们可这个派就是一个流水线。对吧,我们可以通过在这里注册不同的构子函数。来去在某些环节做一些特定的操作。比如说将来我想输出的话,我可以在它输这个将要发射之前啊,这里没有写啊,在将要发射文件之前,我们在这里面去添加新的文件,那么它在发射之前,之后发射的时候就会把我们添加的文件给发射出去,也就给输出出去。所以我们可以在这里面做很多很多事情。好了,那么这里面呢,就是咱们的插件的介绍,最后呢,我们来一起总结一下。
11:05
插件。简单来讲就是通过。扩展外派功能,从而让派拥有更强大的能力。而它的机制怎么做呢?插件这里就要说说,这个怎么做呢,就要了解到PE它是怎么运行的。那运行过程中呢,它大概会创建compil对象,会创建咱们的compilation对象,然后呢,创建compil对象呢,会执行很多个护士,创建compilation对象的时候,也会执行很多副词,他们会按照顺序从上到下依次执行。所以我们要要插件干活,就是要在那些互子、多子函数中去注册事件。一旦你注册事件了,那么wipe在执行过程中,它自动的会调用那些触发事件。执行线的回调,那么在回调函数中就会干我们插件要做的指定的一些工作,从而扩展外派的一些能力。而这些whoses呢,它本质上都是通过他来实现的,这也是nopa中的一个核心包啊。
12:06
那么我们如果只考虑使用的话,我们只关心如何注册钩子。那么有top。Tap tab promise3种方式可以注册钩子,其中tab可以注册同步和异步钩子,下面两个只能注册异步钩子。而注册钩子,那到底有哪些钩子?这时候我们就要看comp对象和对象了的文档。我们并不需要去记啊,实在不知道,我们就从上翻到下,虽然它钩子函数有点多,但是文档中都有详细的介绍,它是在什么时候出发的,我们可以一点点看。所以我们开发插件的话呢,我们就要构思啊,我们应该在插件的,也是说在外pad中的哪个阶段去插入这个事件。然后呢,去干活,我们首先要分析这个,搞清楚了,我们再把事情干好,那么插件就开发好了。
13:00
好了,那么这就是插件的一些内容啊,那么大家可以再继续把这个文档呢,再看一下,有助于你对咱们的插件的一些理解。那么后面我们再开始去开发第一个插件。
我来说两句