安装gulp
全局安装 gulp
|
|
作为项目的开发依赖(devDependencies)安装
|
|
创建gulpfile.js文件
在项目根目录下创建一个名为 gulpfile.js 的文件:
|
|
运行 gulp
|
|
编译Less
安装gulp-less
|
|
|
|
使用方法
|
|
编译Less&压缩改名
//编译Less并且压缩改名*.min.css
|
|
使用方法
|
|
压缩&合并Css&改名
|
|
|
|
|
|
使用方法
|
|
压缩html
安装gulp-htmlmin
|
|
|
|
|
|
使用
|
|
压缩jpg、png图片
安装gulp-imagemin
|
|
|
|
|
|
使用
|
|
压缩JS
安装gulp-uglify
|
|
|
|
|
|
使用方法
|
|
到目前为止,已经基本实现gulp打包压缩前端代码的核心功能,但是这远远还不够。因为在日常开发过程中我们会面临各种前端优化问题,比如缓存、发布、打包所带来的一系列问题。
一般情况下,我们前端开发就会想了解大公司是如何打包的?,在文章中,@张云龙有详细的介绍各种前端工程化,我就不做赘述了。如果你已经看完大公司是如何打包的?那么,你又没有想自己来试一试的想法呢。OK,我们来了解一下吧~~
既然如此,我们来看一下如何解决以下问题:
- 先发布应用(html)还是先发布资源(css、js、png、jpg等)?
- 如何实现资源精确缓存?
- 如何让浏览器主动放弃已经弃用的缓存?
- 如何把资源放到CDN节点上?
我们先把问题放一边,接下来继续改造我们的gulpfile.js文件
添加hash后缀
|
|
|
|
|
|
使用
|
|
执行完成之后这次会有不一样的地方,会在rev/css目录下面会生成一个rev-manifest.json的文件,这个文件将作为替换原始原件的依据并且打包到当前自定义目录./build/rev下,当然这个hash就是当前文件内容的哈希值
|
|
依此类推同理可写出js/png/jpg
的哈希任务,如果文件更改,发布的时候哈希值自然就会发生改变,发布到服务器之后,html页面则会自动放弃以前失效的缓存。
精确管理缓存
精确管理缓存,顾名思义就是在html页面或者css页面中引用的资源文件加上hash后缀,并且自动替换成当前指定的文件,那现在就要用到文章上面提到的rev-manifest.json
文件。
|
|
|
|
|
|
使用方法
|
|
执行完成之后再回到./build/app/
看当前html页面指向的css是否已经变为css/index-38b95d80bb.css
,如果是则恭喜你成功了,如果没有,你还需要斟酌一下~~
至于其他的css中有的图片或者html页面中有的js/image则都是一个道理,可以葫芦画瓢写多个task
执行即可
把资源放到CDN节点上
放到CDN节点上无非就是更改已经发布好的源文件的资源文件链接,这里使用替换即可,也可使用其他方式实现。
|
|
|
|
|
|
使用方法
|
|
同理,在css文件或者其他文件中有引用资源文件就再写几个对应的task
即可。
清除发布目录
OK,在执行之前需要清理一下当前发布目录./build
|
|
|
|
|
|
使用方法
|
|
执行队列
那么,问题来了。这么多的task
难道要一个一个的手动执行么?当然可以一次性搞定撒,要不然怎么叫一键打包发布呢?
|
|
只需执行build
即可
|
|
打包发布
OK,既然是一键打包发布,那么如何打包发布呢?那就要使用zip
ftp
了
|
|
|
|
|
|
|
|
结束语
书接上文,在文章的中段,我抛出了几个问题,通读全文你是否已经有了答案?前端优化已经不再是html css js image
简单问题,而是一个工程化问题:
- 配置超长时间的本地缓存 —— 节省带宽,提高性能
- 采用内容摘要作为缓存更新依据 ——精确的缓存控制
- 静态资源CDN部署 ——优化网络请求
- 资源发布路径实现非覆盖式发布 —— 平滑升级
当然,这个只是使用gulp
来自己编写,也可使用fis
来进行系统操作。