清理服务器上 webpack 打包的过期 hash 文件
现在前端的项目基本上都会用 webpack 打包代码,并且文件名(html 文件除外)都是 hash 化的,这样可以去除浏览器的缓存。但是会产生另外一个问题,就是服务器上会堆积大量过期(不会被用到)的 hash 文件,这些文件又主要是 js
和 css
文件,因为基本上每构建一次都会产生新的 js
和 css
文件。如果这些文件不清除的话,会大量占用服务器存储空间。
1. 思路
- 从
html
文件中读取css
文件的 hash 值集合; - 然后根据这些 hash 值集合,把 hash 不在这个集合内的
css
文件删掉; - 从
html
文件中读取js
文件的 hash 值集合; - 然后根据这些 hash 值集合,把不属于动态加载的,并且 hash 不在这个集合内的
js
文件删掉;(动态加载js
参考 dynamic-imports) - 从不属于动态加载的
js
文件中读取动态加载的js
文件的 hash 值集合; - 然后根据这些 hash 值集合,把动态加载的,并且 hash 不在这个集合内的
js
文件删掉; - 从剩下的
html,css,js
文件中读取图片、字体等其他静态资源文件的 hash 值集合; - 然后根据这些 hash 值集合,把 hash 不在这个集合内的静态资源文件删掉。
2. sclean
基于上面这个思路,我封装了一个 npm 包:sclean.
主要有以下几个功能:
- 备份服务器文件,因为删除是非常危险的一个操作,所以在每次清除过期文件之前都会备份一次,当然也可以手动备份;
- 恢复服务器文件到之前备份的某个状态(用于清除出错之后的恢复操作);
- 根据配置进行清除操作,比如自定义目标目录(
dist, build
),html文件(php, jsp
),hash 长度(32, 8
)等。
安装
npm install sclean -g
执行清除操作
sclean
详细用法参考 sclean.
3. 后续
更多博客,查看 https://github.com/senntyou/blogs
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)