美文网首页饥人谷技术博客
使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并

使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并

作者: 晓风残月1994 | 来源:发表于2017-11-06 20:13 被阅读537次
gulp

gulp 是一款 nodejs 应用,用于前端开发过程中对代码进行构建,是自动化项目的构建利器。她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务,比如打包、压缩、合并、git、远程操作等,能够通过编写好配置文件后,配合使用合适的插件自动完成,提高我们的工作效率。

gulp 简单易用,基于数据流的处理方式,就像制造车间的一台进口车床(gulp),配合一系列高质量的刀具(gulp插件),来流水线般完成多道工序,最后再输出成品(文件)。

中间过程都是半成品(数据流)的形式,可以任意的定制不同工序(使用不同的插件), 一个车间里,也可以布置多个车床(创建多个task任务),用于生产不同产品(比如 图片压缩、CSS压缩合并、JS压缩合并等)。

在你正式使用 gulp 之前,首先你要安装 node.js 环境,自会赠送你 npm 包管理工具,然后 在命令行里:

# 安装 gulp-cli 命令行工具
npm install gulp-cli -g
# 安装本地依赖
npm install gulp -D
# 创建 gulpfile.js 文件
touch gulpfile.js
# 可以选择查看帮助
gulp --help

下面一起来看一个例子,使用 gulp 对图片、CSS 和 JS 进行处理:

(github 源码地址)

首先,创建一个 package.json 文件,把你认为需要用到的模块,通过 npm 安装到 node_modules 文件夹里,可以使用:

npm install -save-dev xxx xxx xxx

如此安装的同时,就写入到 package.json 的开发依赖字段中了,下次别人 clone 你的文件,拥有了你写的 package.json,就可以通过 npm install 快速在本地安装指定的依赖模块了。

因为通常我们是不会把 node_modules 文件夹也 push 到 github 上的,会在 .gitignore 文件中忽略它,这些模块存在于在 npm 的服务器中,(当然也存在淘宝镜像等第三方资源,为了提升我们的 install 速度)我们使用的时候,只需要依照 package.json 说的,安装指定版本即可。

假设你已经安装了需要用到的模块,下面我们就可以开始编写 gulpfile.js 文件了:

var gulp = require('gulp')

//引入组件
var concat = require('gulp-concat'), //合并文件 
  cssnano = require('gulp-cssnano'), //CSS压缩
  autoprefixer = require('gulp-autoprefixer'), //后编译,自动添加css兼容前缀
  jshint = require('gulp-jshint'), //js代码规范性检查
  uglify = require('gulp-uglify'), //js压缩
  imagemin = require('gulp-imagemin') //图片压缩

首先你要做的是引入 gulp 模块,接着引入 gulp 插件,这是CommonJs 的语法规范,因为 gulpfile.js 最终是运行在 node 环境下的。

gulp 有四个方法,gulp.src 、gulp.dest 、 gulp.task 、 gulp.watch,是不是超级简洁?没错,简单即是强大,你需要用干什么,就去下载使用相应的插件即可。

引入组件之后:

我们就开始通过 gulp.task 创建任务并制定任务名称,然后通过 gulp.src 指定输入路径,接着使用 .pipe (相当于管道,电路)串联不同的工具,以数据流(想象水流、电流,经过不同的阀门,闸口,电子元器件)的形式接力处理,最后传给 gulp.dest 输出到指定目录, 完成了我们的目的。

尽管如此,下面的用法初次遇见,可能还是会比较迷糊,但是理解了 gulp 的处理方式后, 阻碍你的只是某个插件的具体用法而已,至于具体怎么用, 那就千篇一律的同时不尽相同了,你只需要到 npm 去搜索相应的插件,仔细阅读 usage 即可,别人说怎么用你就怎么用,人家说了算,不要纠结。

对于 CSS ,我们可以:


gulp.task('css', function(){

  return gulp.src('src/css/*.css')  //读取待src/css 目录下所有的css文件
    .pipe(concat('merge.min.css')) //合并CSS,同时重命名为merge.min.css
    .pipe(cssnano()) //压缩 CSS
    .pipe(autoprefixer({  //自动给CSS 加前缀,用于兼容不同浏览器,不同版本
      browsers: ['last 10 versions'],  //具体参数含义,你应该去npm看文档
      cascade: false
    }))
    .pipe(gulp.dest('dist/css'))  //最后输出到 dist/css 目录下
})

对于JS,我们可以:

gulp.task('js', function(){
  return gulp.src('src/js/*.js') //读取待src/js 目录下所有的 JS 文件
    //.pipe(jshint())  这些都是可以按需使用,进行串联的
    //.pipe(jshint.reporter('default')) //检查如果出错,则在命令行以默认样式输出报告

    .pipe(concat('merge.min.js'))   //合并JS并重命名
    .pipe(uglify())  //压缩JS
    .pipe(gulp.dest('dist/js/'))  //输出到 dist/js 目录下(如果没有这个目录,会自动创建)
})

对于图片,我们可以:

gulp.task('img', function(){
  return gulp.src('src/imgs/*')  //进入
    .pipe(imagemin()) //压缩图片
    .pipe(gulp.dest('dist/imgs')) //输出
})

除了对 CSS、JS 和 图片处理以外,你还可以对 html 进行处理,还可以对版本号 的问题进行处理, 还可以启动一个实时刷新的静态服务器,然后通过 gulp.watch 监听指定目录、指定文件的变化,从而控制浏览器自动刷新, 为调试带来极大的便利性,尤其 CSS 这个大坑。

以上这些都是写在 gulpfile.js 文件中的,然后在命令行这样即可开动 gulp:

  gulp

如下图所示:

在当前项目目录下执行 gulp 时,gulp 会在当前目录下寻找 gulpfile.js 文件,然后执行里面所有的 task,这是gulp 默认行为。

另外,可以传入第二个可选参数,来指定依赖关系,这样当 gulp build 时,会先执行 css js img 三个任务,之后才执行build任务,但由于没有第三个参数,也就是没有回调函数,因此就结束了, 但我们实现了通过 gulp build 来个性化的执行我们指定的任务,而不是 gulp 一股脑的全部执行,当然你也可以直接 gulp css,指定执行 css

gulp.task('build', [ 'css', 'js', 'img']) // 或者把 build 改为 default

你也可以修改 gulp 的默认行为,将上面的 build 换为 default,当执行gulp 时,实际上就干了上面 gulp build 干的事情。

总之,单独执行 gulp ,会先查找文件里 有没有叫做 default 的任务名,他会默认执行default:

  • 有,则按你 default 中要求的来(也可以gulp default 执行)
  • 如果没有 default 的话,会报错:
[21:53:15] Task 'default' is not in your gulpfile
[21:53:15] Please check the documentation for proper gulpfile formatting

gulp xxx:gulp + 任务名 的形式,则执行指定任务。


最后,为什么直接 gulp 或者 gulp xxx 就可以工作了呢?

还记得最开始全局安装的gulp-cli吗?

# 安装 gulp-cli 命令行工具
npm install gulp-cli -g

其实由于我们在本地安装了gulp:

npm install gulp -D

即使不用安装 gulp-cli 工具,我们也能执行,只是很麻烦,
命令行里输入路径,找到 gulp 或者 gulp.cmd,自会执行:


bash终端

但这样有些反人类,还是走寻常路吧,毕竟 直接 gulp 来得更快。

结束语

以上就是对 gulp 的简单使用指南,更多的请访问官网查看文档。

另外在学这些工具的时候千万不要忘了我们的终极目的是什么:
是为了得到处理好的最终文件,因此现在的包括 gulp 等打包压缩处理的工具在内, 都是中间过程。

相关文章

  • gulp-css压缩

    gulp是什么?使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并 gulp是一个基于流的构建工具,可...

  • 前端自动化工具|gulp新手入门

    gulp是前端自动化工具,它可以进行html压缩、css压缩合并、js检查压缩、图片压缩、编译less、编译...

  • Web性能优化

    1、压缩及合并资源使用webpack或Parcel压缩图片、合并CSS和JS文件在线压缩图片网站:https://...

  • Gulp总结

    # gulp 前端自动化构建工具,可以进行文本合并,文件拷贝,js压缩,css压缩,图片压缩等。 ### 入门 1...

  • Gulp总结

    gulp 前端自动化构建工具,可以进行文本合并,文件拷贝,js压缩,css压缩,图片压缩等。 入门 全局安装 gu...

  • gulp-concat js-压缩并合并

    引入 gulp 模块 引入 uglify 压缩 模块 引入 js 合并模块 压缩 并 合并 js文件

  • 前端性能优化

    1. html压缩 2. css压缩,是否合并? 3. js压缩,是否合并? 4. 图片压缩,base64,雪碧图...

  • 最新 完整 gulp之自动化静态资源压缩合并加版本号

    最新 完整 gulp之自动化静态资源压缩合并加版本号 这个方案主要是为了实现js/css/image的压缩合并、自...

  • 网站性能优化

    1、资源压缩合并 (1)图片:雪碧图 (2)JS、CSS合并:利用项目构建工具webpack、grunt、gulp...

  • 优化资源

    文件最小化/文件压缩 js和css文件通过gulp,webpack等工具合并、压缩,减少用户流量,小图片可以在打包...

网友评论

    本文标题:使用 gulp 实现图片压缩、CSS 压缩合并、JS 压缩合并

    本文链接:https://www.haomeiwen.com/subject/ndcrmxtx.html