前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」
已经很久没有写过博客了,现下终于事情少了,开始写博吧
今天网站要做一些优化:图片压缩,资源合并等
以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的相关插件,于是找到了腾讯的智图,而智图目前提供的插件只有gulp-imageisux
无奈之下,只好去学习gulp这款工具了,下面是gulp的相关介绍:
gulp介绍
- gulp.js 是一种基于流的,代码优于配置的新一代构建工具。
- Gulp 和 Grunt 类似。但相比于 Grunt 的频繁的 IO 操作,Gulp 的流操作,能更快地完成构建。
- Gulp基于Node.js的前端构建工具,通过Gulp的插件可以实现前端代码的编译(sass、less)、压缩、测试;图片的压缩;浏览器自动刷新,还有许多强大的插件可以在这里查找。比起Grunt不仅配置简单而且更容易阅读和维护。
- Grunt的插件就像独立的工厂,这个工厂生成出来的产品打包封装好后再送到另一个工厂去加工,使用了Gulp后实现了工厂的合并,所有东西都在一个工厂里完成了。
安装
npm install gulp -g
初始化gulp在当前目录的工作环境
- 安装依赖和将依赖关系写入到package.json的devDependencies中
npm install gulp --save-dev
根据项目需求安装gulp插件
以现在的我的需求为例:批量压缩jpg图片
安装智图压缩图片的gulp插件
gulp-imageisux
这里有点小插曲,第一次使用的时候是失败的,提示 [error] Cannot post to the server
两三天之后,重新试了一下,奇迹般的可以了(原因找到了:需要下载最新版的node),补充:
var gulp = require('gulp');
var imageisux = require('gulp-imageisux');
gulp.task('default', function () {
return gulp.src('book/*')
.pipe(imageisux('/book_min/',false));
});
- 这里的
false为压缩为正常格式的图片如jpg或png, 如果为ture,则统一压缩为webp格式的图片 - 路径问题,imageisux的发布路径似乎是直接放到文件的里面,无论我怎么调整发布路么,关于这个问题还没有得到回复
压缩前

压缩后

安装 gulp-imagemin
因为当时使用报错,就直接另寻它路了:gulp-imagemin
- 安装gulp-imagemin 图片压缩插件
npm install --save-dev gulp-imagemin
项目根目录下新建文件 gulpfile.js
- 文件内容:
var gulp = require('gulp');
var imagemin = require('gulp-imagemin');
var pngquant = require('imagemin-pngquant');
gulp.task('default', function () {
return gulp.src('book/*')
.pipe(imagemin({
progressive: true,
svgoPlugins: [{removeViewBox: false}],
use: [pngquant()]
}))
.pipe(gulp.dest('book_min/'));
});
运行
gulp
运行以上文件又报错了,唉,今天的运气真是...
Error: Cannot find module 'imagemin-pngquant'
说找不到这个模块,但是我去node_modules目录下,一直往下找,却找到了这个模块node_modules/gulp-imagemin/node_modules/imagemin/node_modules/imagemin-pngquant
var pngquant = require('gulp-imagemin/node_modules/imagemin/node_modules/imagemin-pngquant');
再次运行-OK
E:\Test\zip>gulp
[15:39:37] Using gulpfile E:\Test\zip\gulpfile.js
[15:39:37] Starting 'default'...
[15:39:39] gulp-imagemin: Minified 30 images (saved 1.62 MB - 33.4%)
[15:39:39] Finished 'default' after 1.9 s
但似乎看起来还是不对,不应该这样来引用imagemin-pngquant插件,而他给的例子为什么是那样的呢,于是我在github提了issues,不到一分钟的时间,作者就回信了,

原来别人已经提过这个问题了,下面看看作者是怎么回答的

balabala具体说的什么意思,我复制到百度翻译也不是特别清楚,不过大概意思我知道了,关注点分离:也就是说作者这个插件本身可以不需要其它任何辅助插件就能工作的,其它的辅助插件,是在你需要的时候再进行选择性的安装,而不应该是他集成到他的插件里面
好吧,以上只是我的猜测,小来英语差,老大做编程!如果有哪位语言棒的同学,求解释
竟然如此,那我们就只好缺什么,装什么了
这里我需要对jpg和png图片做压缩,那么我就只需要安装这两个插件了:imagemin-jpegtran 和 imagemin-pngquant
npm install imagemin-pngquant
npm install imagemin-jpegtran
好,现在,所有的该装的都装了,可以实战了...
目前js内容如下:
var gulp = require('gulp');
var imagemin = require('gulp-imagemin');
var jpegtran = require('imagemin-jpegtran');
var pngquant = require('imagemin-pngquant');
// 任务:压缩jpg
gulp.task('jpgmin',function(){
return gulp.src('book/*.jpg')
.pipe(imagemin({
progressive: true,
use:[jpegtran()]
}))
.pipe(gulp.dest('book_min/'));
});
// 任务:压缩png
gulp.task('pngmin',function(){
return gulp.src('book/*.png')
.pipe(imagemin({
quality: '65-80',
speed: 4,
use:[pngquant()]
}))
.pipe(gulp.dest('book_min/'));
});
// 默认处理的任务:
gulp.task('default', function () {
return gulp.start('jpgmin', 'pngmin');
});
运行gulp
E:\Test\zip>gulp
[16:38:46] Using gulpfile E:\Test\zip\gulpfile.js
[16:38:46] Starting 'default'...
[16:38:46] Starting 'jpgmin'...
[16:38:46] Starting 'pngmin'...
[16:38:46] Finished 'default' after 16 ms
[16:38:50] gulp-imagemin: Minified 13 images (saved 1.24 MB - 53.7%)
[16:38:51] Finished 'jpgmin' after 4.71 s
[16:38:52] gulp-imagemin: Minified 16 images (saved 591.58 kB - 66%)
[16:38:52] Finished 'pngmin' after 5.35 s
查看结果:
文件目录

压缩前

压缩后

PS:可以看得出来,压缩后的文件比之前少了约2M的大小,效果还是很明显的
jpg文件效果对比,大小减少了20k

png文件效果对比


PS: png文件减小了几十k,是不是效果更明显了
到目前为止,功能算是已经实现了,至于资源压缩合并我已经使用FIS做好了,这里的功能留于后面的章节讲述!
下一篇,将要介绍gulp的常用插件配置及使用!
前端构建工具之gulp(一)「图片压缩」的更多相关文章
- 前端构建工具之gulp的安装和配置
在选择构建工具时,看到更多人推荐gulp,从此入了gulp的坑- 一.安装node环境 百度谷歌一下就有了,在终端中分别输入 node -v 和 npm -v,若显示node和npm的版本号则说明no ...
- 前端构建工具:gulp的配置与使用
安装gulp 因为gulp是基于node的管理工具,所以要先安装nodejs安装nodejsnodejs下载地址:中文站:http://nodejs.cn/ 英文站:https://nodejs.or ...
- 前端构建工具gulp使用
前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...
- 前端构建工具gulp介绍
2016年3月3日 10:46:08 晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...
- (转载)前端构建工具gulp使用
前端构建工具gulp使用 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中 ...
- 前端构建工具gulp
前端构建工具gulp使用 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gul ...
- 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上
.table tr>td:nth-child(1){width: 2em !important;padding-left: .6rem !important;padding-right: .6r ...
- 前端读者 | 前端构建工具Gulp
@羯瑞 整理 前言 前端工具现在层出不穷,网上搜下一大片,就看你怎么去使用了,基于项目看用什么样的构建工具.有的工具提供的功能还是非常强大的. FIS.百度团队的产品.现在百度的多个产品中使用.面向前 ...
- 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5
Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...
随机推荐
- 理解Docker(4):Docker 容器使用 cgroups 限制资源使用
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- [转]How to: Create a Custom Principal Identity
本文转自:https://msdn.microsoft.com/en-us/library/aa702720(v=vs.110).aspx The PrincipalPermissionAttribu ...
- SQL必知必会 14-22(完)
博主依然不想打字,又向你仍来了一堆代码... 13(续) 在SELECT中用COUNT()以及联合 mysql> SELECT customers.cust_id,COUNT(orders.or ...
- Ajax入门(二)
接收服务器返回的消息 1,定义触发Ajax的js效果 2,创建Ajax方法 如果返回的数据是XML,则需使用aj.responseXML 3,接收服务器返回的消息,并显示在网页上 错误案例:直接接收服 ...
- c#常用方法
创建目录 Directory.CreateDirectory(Application.StartupPath+"\\test");
- 详解mysql如何配置远程链接,解决各种连接问题
在服务器上面我们经常需要去使用mysql,有些童鞋刚刚配置好了服务器,想在本地的一些图形化软件去连接mysql得到更直观的表格显示,此时很可能不允许连接,为了探究为什么连接失败,在这里我会对mysql ...
- 大于16MB的QSPI存放程序引起的ZYNQ重启风险
ZYNQ芯片是近两年比较流行的片子,双ARM+FPGA,在使用分立FPGA和CPU的场合很容易替代原来的分立器件. ZYNQ可以外接QSPI FLASH作为程序的存储介质. QSPI和SPI flas ...
- C程序设计语言学习笔记
在Windows下运行C语言程序 Windows下的编程工具使用 VC 6.0,下面讲解如何在VC 6.0下运行上节的"Hello, world"程序. 1) 新建Win32 Co ...
- System.Environment.CurrentDirectory和Application.StartupPath
System.Environment.CurrentDirectory的含义是获取或设置当前工作路径,而Application.StartupPath是获取程序启动路径,表面上看二者没什么区别,但实际 ...
- Spring Boot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...