00:00
接下来我们实现一个叫clear的插件。过去在WIFI4中呢,的确有这么一个插件来专门清空打包输出的这个目录的。但是在WIFI5中呢,它把这个功能内置了,所以你只要写一个肯为true就可以了。那么我们呢?待会为了写这个插件,我们就需要把肯定为true先关掉,我们自己实现这个肯,在它打包出之前将上次内容清掉。那么同样一个问题我们要搞清楚啊,开发插件永远都要想,想着我们在哪里去做这个事。需要考虑清楚在什么时机下做。我要清除打包啊这个文件,那么第一种方式就是在最开始的时候,我就把上一次内容给清掉。那么再开始这次打包,这当然是没问题。但是这时候就存在一个问题,就是万一我在中间的时候有一些流程错了,它会自动退出。那么此时我一上来就把东西给清了,那我这时候啥也没有了,会不会不太好?
01:04
所以我们这时候是怎么说呢,是在即将输出资源之前,我们在清空,这样的话呢,假设前面有什么东西运行错了,那么我之前的那个打包出的东西还是不变,还是在那里。对吧,只有我们当前运行都是成功的,我再把它清空,然后再舒服,这样呢可能会比较好。那么在打包输出前再清空的话,用的钩子还是上面的钩子,一米钩子。那么我们接下来就是获取到钩子之后呢,接下来我们在清空里面的内容。首先我们要获取到这个。输出的目录。通过compare的对象,我们可以获取到打包输出的目录,因为compare对象上面有所有的配置项,外派的配置项。然后呢,这个要清空目录的话呢,我们要进行FS的一些文件操作,这里面我们就用上这个output file system来操作咱们的文件。好,大概思路呢,我们给大家讲解了一下,接下来我们继续开发。
02:05
来,我们新建一个。叫外派。那么用这个插件还是要记得要把肯定为true这个功能给关掉。好,后面我们再一点写啊。来,肯定要。卡,那肯定要玩牌发。然后呢,将他暴露出去。我们首先写不大方法。在这里得到对象。咱们还是一样啊,我们先要知道我们做什么事。首先我们需要获取对吧,注册钩子。那么在打包输出之前。
03:01
也就是说我们这个it。注册完钩子之后呢,我们接下来需要做的是获取打包输出的目录。虽然我们知道是D3,但是将来可能也有的同学加B的,加别的,所以我们不能确定啊,我们要获取打包输出的目,不能直接写死。获取打包,输入目录,接下来第三步就是啊,通过FS删除。打包输出目录下的所有文件。那么这样就可以了。OK,那么下面我们来点做啊,首先注册钩子,Comp whose.it。这里呢,我同样用tab去注册,咱们这里还是定义成同步钩子,虽然它本身是异步的,但是我们通过tab就是不进行异步操作。OK,在这里面呢,我们可以得到这个对象。
04:03
接下来第二步,获取打包的这个目录。怎么获取呢?这时候我们就要用上comp对象的一些内容啊,我们在外面就直接把这个定义好吧,Output pass。获取方式呢,其实有两种啊,Comp上面就有个属性叫out pass。或者是通过options。然后呢,再去option这里找到我们设置的output,上面我们设置过pass,这也是输出路径,两种方式都行。我们都会打印一下。那第一种话是简单,第二种的话是麻烦,所以你自己可以看着用。我们接下来想看一下这个效果,所以我们想把这个插件执行一下。那么我们也要来到派这里进行配置。好,记得把肯定为处给关掉啊,不然的话呢,我们后续功能啊就会受到影响。
05:06
那么接下来我们就尝试打包观察打印结果。那么这里我们来看一下,这里就已经打印出来了。是不是?打印出来的我们这个内容。呃,它呢,这个它有一个值没有值啊,这个compare output pass这个值好像没有,没有获取到啊,那没获取到呢,我们就通过option去获取,这样会更方便一点,第一个值它这里没有,那我们去掉它吧,我们就用第二个值,因为前面有个空隙啊,如果没有空隙的话,那就相当于有啊,有有空隙说明它第一个值没有,所以我们用这个pass。呃,在外面获取就好了,在里面获取也OK啊,在哪里都行,那么我们想在里面直接使用。那么接下来呢,我们就通过FS去删除这个文件,那么通过FS首先要拿到FS,我们继续拿到FSFS呢是肯的对象,上面专门有一个属性啊,叫put。
06:11
File。那么这就是我们要操作的GFS。那么这个删除的话呢,我定一个方法去操作,当然你不定义方法也是OK的,这里我定一个方法,因为接下来我们这个操作有一个需要递归调用的一个形式。你呢,给我一个路径。同时告诉我这个FS就好了,那么我接下来把你删了。所以这里呢,我们只需要调用这个这些remove方法,将我们的FS和要删除的这个路径传过去,那么它就会删除。那么怎么删除呢?我们来说一下这个大概流程。首先你要读取。他这个删除不是直接一个方法就能删除啊,你也要删除一个目录,你首先要把目录下的所有文件给删了。
07:07
只要把文件删了,这个目才能删,如果文件有一个没删目就删不掉。所以我们要删除的话。想要?删除目录对吧,打包输出目录。下的所有资源。需要先将。目录下的资源删除,才能删除这个目录。所以我们要删除木下所有资源呢,我们要一个一个删啊,也没有别的好的方法,要一个一个删的话呢,我们首先要第一步读取当前目录下的所有资源。咱们得知道有哪些资源,对吧,然后呢,再编辑呗,一个个删除。
08:02
怎么读取当前目录下所有资源呢?FS有个方法叫Di。咱们这里呢,都有同步方法,所以用think这个方法,你传一个fair pass,返回值就是我们所有一个数组,这个数组就是它由所有文件组成的一个数组。好,这个时候啊,就有个问题来了。因为我们的资源是有文件夹的,有images JS有文件夹的,所以这个数组中呢,它是有文件夹的。我们可以打印一下这个file,一起来看一下。它是有文件夹的。你看长这个样子。其中。Images是文件夹,Index是文件,JS是文件夹,它是由这些组成的。那么同样的,我们想把images删除的话,也是要把images下面的文件给删掉,才能删除images。
09:01
那么GS也是同理,但是1.6呢,可以直接删除。所以我们遍历完这个得到所有文件之后啊,我们接下来遍历一个删除还得做处理。他要想变定一个小组,首先得。遍历所有文件判断。那么是文件夹还是文件对吧?那么是文件夹啊,就得啊,就得删除下面所有。文件才能删除文件夹。那么如果你是文件就可以直接删除。是这样的一个流程。所以我们接下来就要进行遍历了。Fairly for each。
10:02
好,这样能得到一个。怎么判断它是文件夹还是文件呢?那么这个时候我们FS有个方法叫F。它可以分析这个文件到底是文件夹还是文件。那么这个分析这里就要稍微注意一下,你直接分析它是分析不到的。我们来看一下能不能分析到啊。我们直接分析前面的我们都都没打印啊,所以只有这里有打印,我们直接看最后的打印结果就好。找不到这个image,为什么找不到呢?因为它是第下面的images,不是直接是images,它第下面的image,所以你直接找images,它会去当前目录下找image词,这根本就找不到。所以我们这个路径啊,需要做个处理。
11:01
它是首先用上我们之前的这个output pass啊,其实就这个fire pass。然后斜杠再加上。我们当前的这个方。由这两部分组成,这样呢才能对它进行分析。这样才能进行分析,呃,这里我们这个命名重复呢,那我直接pass吧。我们再打包。这时候它就会返回一个FS的一个文件对象啊,这里面包含文件的各种信息。OK,有了这个对象之后,我们就可以去判断了。它上面也专门有个方法用来判断是否是文件夹的,叫1DIRECTOR。返回值是处,那么就是文件夹,Else,它就是文件。所以来到这里,它就是文件夹。来到else,它就是文件。
12:01
所以最后是这样的。设置文件夹呢,我需要删除下面所有文件再做,其实就是继续调整方法。啊,传FS,然后再传当前要处理的这个文件路径。是文件的话可以直接删除,FS有个方法叫link。当然也是同步方法,那么你直接传这个文件路径,它就可以把这个文件给删掉了。所以这样呢,我们就可以把咱们的一些文件全都给删除。下面我们看效果。首先,在不用插件之前。我们来演示一下。假设我这里专门有些文件,我故意改错了名字啊。好,有个叉底,我们重新打包。这个时候因为我们没有清空打包输出结果,所以这个XDS还在这里。我们用上我们的这个肯定要反方我们再打包。他会在输出之前把之前的资源给删掉,然后再重新打包,诶这个时候你会发现之前的那个XGS就没了,因为被我们给删掉了。
13:10
好了,这里就是肯定要啊。最后还是总结一下,我们首先需要考虑清楚,我们是在哪个钩子,哪个户子里面去做出这个事的。那么这里有两种考虑,第一种是一上来我就做。速度最快对吧?但是问题是如果后面有些流程做失败了,那么微派其实会退出的,那么你一上来就把这个资源给删了,那么这个时间就有点相当于是我明明都已经报错了,你却还帮我把这个事做了,那就有点得不偿失了。所以我们就希望呢,等你全部做完,即将输出之前,我们再去删除就好了,在最后来做。那么删除的话呢,就是进行各种文件操作啊,所以这里大家需要对FS有一些必要的认识。它的一些radio Di对吧,Statesator remove啊,这个按link这些方法大家需要有些基本认识。
14:03
当然,你如果不知道的话,也听这个,也知道read DR读取文件夹下面的所有文件。Set就是分析这个文件信息,判断它,通再调一个方法可以判断它是文件夹还是文件,而link就是删除文件的一个方法。到这里呢,我们就把这个定义好了。肯定要外派。
我来说两句