gulp是基于流的前端自动化构建工具。

之前也谈到了 grunt的用法,grunt其实就是配置+配置的形式。

而gulp呢,是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用。

同样的,也是包括基本用法和各插件的使用。

一、环境配置

gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好

然后给系统配上gulp环境

npm install -g gulp

再到某一工程目录下

跟grunt一般,也是需要package.json包依赖文件和一个入口文件 gulpfile.js(其他名字识别不了)

然后就类似的先装上gulp

npm install gulp --save-dev

最基本的使用方式是这样:(使用jshint插件校验js代码)

var jshint = require('gulp-jshint');

gulp.task('myTask',function(){
return gulp.src('main.js')
.pipe(jshint({undef: true}));
});

然后命令行使用:gulp myTask 即可运行此程序。

二、基本用法--插件使用

gulp所支持的插件也是很多的,使用方式跟基本的nodejs差不多。

下面统一介绍几个常见的 插件,更详细用法可以到对应官方站点查看API

使用它们,就要先install,可以直接在package.json中直接配置devDependencies依赖项,然后再统一 npm install

或者一个一个地安装,依赖项会自动建立。比如安装压缩css的依赖包:

npm install gulp-minify-css --save-dev

这里直接把所以依赖全支持上,因为都要用到。

然后进入 gulpfile.js文件,先直接require

var gulp = require('gulp'),
sass = require('gulp-ruby-sass'),
autoprefixer = require('gulp-autoprefixer'),
minifycss = require('gulp-minify-css'),
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
rename = require('gulp-rename'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload'),
del = require('del');

然后,新建一个任务:

gulp.task('styles',function(){
return sass('static/style/test.scss',{style: 'expanded'})
.pipe(autoprefixer('last 2 version','safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('static/style'))
.pipe(rename({suffix:'.min'}))
.pipe(minifycss())
.pipe(gulp.dest('./build/static'))
.pipe(notify({message: 'style done!'})); });

解释一下,其实就是 将sass文件编译成css,以流的形式pipe结果,再加css前缀,修改后缀为.min.css,并作资源压缩,最后成功后返回done的消息

命令行键入 gulp styles 成功的话看到done信息,相应css文件也顺利产生。

原本打算直接用src的形式,没料到会出错,难道是 gulp-ruby-sass 不支持这种写法?

再试一下 js的

gulp.task('scripts',function(){
return gulp.src('./static/**/*.js')
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(gulp.dest('./static/script'))
.pipe(rename({suffix:'.min'}))
.pipe(uglify())
.pipe(gulp.dest('./build/static'))
.pipe(notify({message: 'script done!'})); });

当然,现在有两个任务了,直接gulp [task]未免太麻烦

命令行 gulp默认执行的是default的任务

所以可以这么玩:

gulp.task('default',['watch'],function(){
gulp.start('styles','scripts');
});

解释一下,第一个参数是任务1(不一定非得default),第二个参数也是任务(这个任务可以为空,代表着任务一依赖它(们),任务一执行完才轮到它,当然了,其实我现在这个顺序好像有点..)

这个watch是一个监听的任务,下头会讲到

然后gulp.start 再执行上述的那两个任务。

这样一来,命令行直接gulp就能执行这仨任务了,还能实时监听改变哦~

这个watch的监听任务:

gulp.task('watch',function(){
gulp.watch('./static/style/test.scss',['styles']);
livereload.listen();
gulp.watch('./build/static/test.min.css').on('change',livereload.changed);
});

解析:第二行是指监听那个scss文件,如果有改动就执行styles的那个任务

第三行是开启浏览器端的监听模式

第四行是监听某个css文件,比如我html文件引用了这个文件,它变化时浏览器就会自动刷新。

ps: 不过默认情况下可能还是无法监听的,有两种方法:

装上 liveReload 插件(比如chrome上)

给html代码添加上:参考

<script>document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1"></' + 'script>')</script>

如果是远程机子,非本地的,例如: 参考

<script src="http://192.168.0.1:35729/livereload.js?snipver=1"></script>

ok 整个运行一下吧!

shenmegui .. console.log都识别不了,不管了..忽略

不过为什么jshint出错了还会继续下面的操作呢?看了还得截断一下才行

还有图片的压缩imagemin插件

.pipe(cache(imagemin({ optimizationLevel: 5, progressive: true, interlaced: true })))

以及clean插件的使用等:

gulp.task('clean', function(cb) {
del(['dist/assets/css', 'dist/assets/js', 'dist/assets/img'], cb)
});

当然,gulp任务的执行是异步的,也就是说,任务之间的执行没有先后之分,若想保证执行顺序

只好定义依赖关系(如上述参数二的依赖)

或者使用Promise对象实现,回调函数的使用,参考

更多的操作还需到各自插件API查看

总之,gulp比grunt简洁了许多,但因为是基于流的形式,不免又会带来“一些麻烦”。

前端自动化工具 -- Gulp 使用简介的更多相关文章

  1. 前端自动化工具gulp自动添加版本号

    之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...

  2. 学习安装并配置前端自动化工具Gulp

    Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...

  3. 前端自动化工具 -- gulp https://angularjs.org/

    gulp是基于流的前端自动化构建工具. gulp是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用. 同样的,也是包括基本用法和各插件的使用. 二.基本用法--插件使用 gu ...

  4. 前端自动化工具 gulp

    最近一个项目才接触这些自动化工具 webpack gulp grunt 等等.. webpack 可以引入模块 和 压缩 gulp 和 grunt 可以压缩 这里只说下gulp  因为项目里只用到gu ...

  5. 安装并配置前端自动化工具-gulp

    由于现在前端自动化已经很有必要了,所以我今天死皮烂脸的找了2位前端大咖帮助我安装和配置gulp,讲真,这一步步弄下来直到安装配置成功,到现在还是迷迷糊糊,不过我还是把这些步骤给记录下来,以防下次不记得 ...

  6. 前端自动化工具 -- grunt 使用简介

    grunt作为一个前端构建工具,有资源压缩,代码检查,文件合并等功能. 下面就简单了解grunt的使用. 一.环境配置 grunt是基于nodejs的,所以需要一个 nodejs 环境,未了解的可以  ...

  7. “流式”前端构建工具——gulp.js 简介

    Grunt 一直是前端领域构建工具(任务运行器或许更准确一些,因为前端构建只是此类工具的一部分用途)的王者,然而它也不是毫无缺陷的,近期风头正劲的 gulp.js 隐隐有取而代之的态势.那么,究竟是什 ...

  8. 【gulp】前端自动化工具---gulp的使用(一)------【巷子】

    什么是gulp?   基于node的自动化构建工具   扩展:开发的时候分为2个节点一个是开发阶段  另一个是部署阶段        开发阶段:源文件不会被压缩            部署阶段:所有文 ...

  9. 前端自动化工具gulp入门基础

    gulp是前端开发过程中经常要用到的工具,非常值得花时间去掌握.利用gulp,我们可以使产品流程脚本化,节约大量的时间,有条不紊地进行业务开发.本文简单讲一下入门gulp需要掌握的东西. 安装gulp ...

随机推荐

  1. 谢谢博客-园,让我不再有开源AYUI的想法

    第一次 第二次 教程不会在博客园上写了,具体的看我官网博客吧,谢谢大家了 ================= 我是个有素质的程序员 艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹艹 ...

  2. count有关

    1.count有两个作用:统计某个字段有值的记录数:统计结果集的记录数.2.count括号内的表达式不为null,就是统计结果集的记录数.也就是说,count(1),count(*),count(10 ...

  3. asp.net中TreeView的大数据加载速度优化

    由于数据量太大,加载树时间很长,所以进行了优化 前台 .aspx <asp:Panel ID="Panel2" runat="server" Height ...

  4. Activity intent经常使用的 FLAG

    Intent.FLAG_ACTIVITY_NEW_TASK 默认的跳转类型,会重新创建一个新的Activity,不过与这种情况,比方说Task1中有A,B,C三个Activity,此时在C中启动D的话 ...

  5. 很好的一篇讲LTP在编解码中的作用的文章

    原文链接 LONG-TERM PREDICTION by: Adit Aviv       Kfir Grichman introduction: The speech signal has been ...

  6. 通过lua获取nginx的内置变量,通过这些变量做些逻辑的处理

    Nginx提供了很多内置的变量,如: $arg_PARAMETER 这个变量包含在查询字符串时GET请求PARAMETER的值. $args 这个变量等于请求行中的参数. $binary_remote ...

  7. R语言之词云:wordcloud&wordcloud2安装及参数说明

    一.wordcloud安装说明 install.packages("wordcloud"); 二.wordcloud2安装说明 install.packages("dev ...

  8. android 14.04 64位 adb cannot run program adb

    按照网上的说法: Failed to get the adb version: Cannot run program "adb": error=2, 没有那个文件或目录 64位系统 ...

  9. 读写文本(.txt)文件 .NET

    http://www.cnblogs.com/jx270/archive/2013/04/14/3020456.html (一) 读取文件 如果你要读取的文件内容不是很多,可以使用 File.Read ...

  10. Win7下使用Telnet命令

    在调试网络端口是否通畅的时候会经常使用到telnet命令,但是在Windows7系统下这个命令默认是不开启的. 开启Telnet命令的方法: 1.在开始程序里,打开控制面板. 2.在控制面板里,点击“ ...