一篇文章搞定webpack4的clean-webpack-plugin

看了就要关注我,喵呜~

clean-webpack-plugin

在webpack中clean-webpack-plugin这也是一款很常用的插件。看字面的意思,我们就知道它是用来做什么的,没错,它就是用来删除文件夹的,确切的说是删除webpack打包后的文件夹以及文件

为什么要删除文件?

我们之前讨论过output里面的三个属性

hash 工程项目级别,如果修改了项目中的一个文件,对,就是一个文件,打包后,所有文件的hash码全部更新并且一致,如下图所示

chunkhash 文件级别,如果修改了项目中的一个文件,那么只有这个文件和于这个文件相关联的打包文件的hasn码变化,其他的不变,如下图所示

contenthash 在分离css文件时需要使用contenthash,js文件里引用了css(less,scss也是同理),这时候需要用contenthash,以保证css文件修改后,打包过后的hash码变化

关于hash多说几句

打包为什么添加hash?

如果不加hash码,每次打包出来的文件名都是一样的,然而用户设备里是存在缓存的,除非用户清除缓存(这显然不现实)所以添加hash码保证文件的唯一性,文件不被用户缓存。

有hash就够了,为什么还要用chunkhash

是的,只用hash完全能够满足需要,hash是工程级别的,如果项目里但凡有一个文件有改动,打包后的hash码就会更新,所有文件的hash码都会更新,而且都是一样的hash码,所以问题来了,如果我们的项目很大,我们只是修改了一个bug或是一个页面,却需要用户重新更新所有文件,用户体验大大降低了。

这时候chunkhash出现了,他是文件级别的,一般我们在output的chunkFilename中使用它,在outpput的filename中使用hash,在css分离的时候使用contenthash,当然事无绝对,我们应该见机行事,如果担心写错了,可以全部用hash代替,就是牺牲一些用户体验罢了,牺牲多少呢?项目越大,牺牲越大

关于hash的具体介绍参见我之前的文章

从零搭建webpack4之output输出

言归正传 ,为什么要删除文件呢?

我们在打包的output中使用了hash码,使文件名是唯一的,然后我们的开发会继续,开发不息,打包不止,看图

第一次打包

更改了一下页面,进行第二次打包

又一次修改页面,进行第三次打包

。。。

dist文件夹会越来越大,当然你可以选择手动删除,但是在服务器上呢?手动删除来得及吗?手动删除不觉得很low吗?

clean-webpack-plugin如何使用

使用起来相当简单了

明确一点,这个插件实在打包的时候使用的

看代码片段

这是最简单也是最常用的配置

实例化CleanWebpackPlugin有两个参数,

第一个是填写要删除的路径,格式是个数组,我们看一下demo片段

第二个参数是对象类型的配置,继续看demo片段

root

root:绝对路径,就是要根据这个root去找要删除的文件夹,默认是这个webpack配置文件所在额目录也就是__dirname,关于路径问题,我们之前在从零搭建webpack4(mode和entry)讨论过,简单复习一下,

root的默认值就是__dirname

verbose

verbose 这个没什么说的了,昨天说happypack的时候提过这个,就是控制台打印日志,默认是true

dry

这是主要功能了,为false是删除文件夹的,为true是不删除的,默认值是false

watch

watch在编译的时候删除打包文件,就是在你npm start或者npm run dev,等跑本地服务的时候,删除之前的打包文件,

感觉这个功能好鸡肋啊,没啥大用

exclude

排除不删除的目录,主要用于避免删除公用的文件

这个exclude不常用,我本地跑demo如下,

看一下dist目录结构

代码如下

可以排除assets文件夹不被删除,也就是说可以排除dist的下一级目录不被删除,想assets,index.html(排除这个只是为了测试),

但是想要保留assets/images,就不能这样来实现了,但是可以“曲线救国”,代码如下,

allowExternal

允许插件清理webpack根目录之外的文件夹。默认:false -不允许清除webpack根目录之外的文件夹

beforeEmit

在文件被发送到输出目录之前执行clean操作,默认值:false

总结

clean-webpack-plugin 功能不少,但是在实际生产中,我们经常用到的就那么两个,掌握这几个,基本可以无障碍使用clean-webpack-plugin了

root,配置要删除的路径

dry,是否要删除

今天就到这里,明天不见不散

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181118G09B7J00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券