gulp,让我们专注于写代码

概念图:

gulp
gulp

首先先放上三个问题:


什么是gulp?
为什么是gulp,而不是grunt?
怎么使用gulp?

现在来一一解答上面的问题:

什么是gulp:


gulp简介:

gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。

简而言之,在工作中,gulp能解决很多需要我们手动处理的操作,像代码的合并、压缩、编译、自动补全等等;

为什么是gulp而不是其他:


gulp和grunt异同点:

易于使用:采用代码优于配置策略,Gulp让简单的事情继续简单,复杂的任务变得可管理。
高效:通过利用Node.js强大的流,不需要往磁盘写中间文件,可以更快地完成构建。
高质量:Gulp严格的插件指导方针,确保插件简单并且按你期望的方式工作。
易于学习:通过把API降到最少(4个),你能在很短的时间内学会Gulp。

  • grunt:
sass: {
    dist: {
      options: {
        style: 'expanded'
      },
      files: {
        'dist/assets/css/main.css': 'src/styles/main.scss',
      }
    }
},
autoprefixer: {
    dist: {
      options: {
        browsers: [
          'last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'
        ]
      },
      src: 'dist/assets/css/main.css',
      dest: 'dist/assets/css/main.css'
    }
},
grunt.registerTask('styles', ['sass', 'autoprefixer']);

grunt首先对sass样式文件进行了编译 --> 输出,其次再进行自动补全 --> 输出,最后覆盖css文件。

  • gulp:
 gulp.task('sass', function() {
        gulp.src('src/styles/main.scss')
          .pipe(sass({ style: 'compressed' }))
          .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
          .pipe(gulp.dest('dist/assets/css'));
      });

gulp引入sass文件,执行编译,其次执行自动补全,最后输出;

** 相比较而言,grunt对特定的任务处理起来相对较凌乱,而且处理的过程中还会产生碎片文件(上例中最后一步覆盖操作)。而gulp处理任务时是one by one,贯彻流的概念在其中,相对逻辑清晰易懂。想必你也大致了解了他们的异同,快来一同进入gulp的世界吧。**

怎么使用gulp:


首先你必须对nodejs中的npm包管理工具有一定的了解,教程可参考链接的1~4小节 >> gulp详细入门教程

  1. 确保安装好nodejs后,打开终端(快捷键win+r --> 键入命令cmd并回车),键入如下命令,在全局安装gulp:
npm install gulp -g
  1. 接着通过cd定位到项目文件夹根目录(以下操作都基于此目录进行),再键入如下命令,创建packge.json文件:
npm init

packge.json文件实例(* 注意:json文件内是不能写注释的,复制下列内容请删除注释 *):

{
    "name": "test",   //项目名称(必须)
    "version": "1.0.0",   //项目版本(必须)
    "description": "This is for study gulp project !",   //项目描述(必须)
    "main": "gulpfile.js",   //配置文件
    "devDependencies": {    //项目依赖的插件
        "gulp-cache": "^0.4.3",
        "gulp-imagemin": "^2.4.0",
        "gulp-plumber": "^1.1.0"
    },
    "repository": {    //项目资源库
        "type": "git",
        "url": "https://git.oschina.net/xxxx"
    },
    "author": {    //项目作者信息
        "name": "surging",
        "email": "surging2@qq.com"
    },
    "license": "ISC"    //项目许可协议
}
  1. 安装gulp:
npm install gulp -S
  1. 安装插件(gulp插件):

安装之前先对常用插件做个介绍:

  • gulp-less:less编译;
  • gulp-imagemin:压缩图片(包括PNG、JPEG、GIF和SVG图片);
  • gulp-cache:压缩图片时比较耗时,在很多情况下我们只修改了某些图片,没有必要压缩所有图片,使用”gulp-cache”只压缩修改的图片,没有修改的图片直接从缓存文件读取;
  • gulp-plumber:编译出现异常不退出监听;
  • gulp-sourcemaps:该插件能更容易的找到对应的less文件;
  • gulp-notify:捕获错误,返回错误信息;
  • gulp-autoprefixer:自动补全浏览器前缀;
  • gulp-clean-css:压缩css文件
  • gulp-make-css-url-version:给css文件url地址添加版本号;
  • gulp-rev-append:给页面的引用添加版本号,清楚页面引用缓存;
  • gulp-uglify:压缩js文件;
  • gulp-concat:合并javascript文件,减少网络请求;
  • gulp-rename:重命名文件;
  • del:清除文件;

开始安装插件,键入以下命令:

npm install gulp-less -S

5.新建gulpfile.js文件:

    //获取对应模块;
    var gulp = require('gulp'),
        notify = require('gulp-less');
    
    //创建less任务
    gulp.task('less', function(){
      //要处理的less文件路径
      gulp.src('src/less/*.less')
        //编译less
        .pipe(less())
            //输出
        .pipe(gulp.dest(['dist/css', 'src/css']))
    });

    gulp.task('auto', function(){
      //监听less文件,当发生改动时,启动less任务
      gulp.watch('src/less/*.less', ['less']);
    }

    gulp.task('default', ['less', 'auto']);

6.定位到当前项目运行gulp,,键入如下命令:

gulp

7.完整gulpfilejs配置文件:

var gulp = require('gulp'),
        imgMin = require('gulp-imagemin'),
        cache = require('gulp-cache'),
        notify = require('gulp-notify'),
        plumber = require('gulp-plumber'),
        rename = require('gulp-rename'),
        pngquant = require('imagemin-pngquant'),
        uglify = require('gulp-uglify'),
        styles = require('gulp-less'),
        autoprefixer = require('gulp-autoprefixer'),
        cssMin = require('gulp-clean-css'),
        cssver = require('gulp-make-css-url-version'),
        concat = require('gulp-concat'),
        del = require('del');

    gulp.task('imgMin', function(){
        gulp.src('src/img/*.{jpg,png,gif,ico}')
            .pipe(plumber({errorHandler: notify.onError("Error: <%= error.message %>")}))
            .pipe(cache(imgMin({ optimizationLevel: 5, progressive: true, interlaced: true })))
            .pipe(gulp.dest('dist/img'));
    });

    gulp.task('jsMin', function(){
        gulp.src(['src/libs/*.js', 'src/js/*.js'])
            .pipe(plumber({errorHandler: notify.onError("Error: <%= error.message %>")}))
            .pipe(concat('index.js'))
            .pipe(rename({suffix: '.min'}))
            .pipe(uglify({
                mangle: {except: ['require', 'exports', 'module', 'touch', '$']}
            }))
            .pipe(gulp.dest('dist/js'));
    });

    gulp.task('styles', function(){
        gulp.src('src/less/*.less')
            .pipe(styles())
            .pipe(autoprefixer({browsers:['last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'Android >=4.0']}))
            .pipe(gulp.dest('src/css'));
    });

    gulp.task('cssMin', ['styles'], function(){
        gulp.src(['src/css/*.css', 'src/libs/*.css'])
            .pipe(plumber({errorHandler: notify.onError("Error: <%= error.message %>")}))
            .pipe(concat('index.css'))
            .pipe(rename({suffix: '.min'}))
            .pipe(cssver())
            .pipe(cssMin({
                advanced: true,
                compatdsibility: 'ie8',
                keepBreaks: false
            }))
            .pipe(gulp.dest('dist/css'));
    });

    gulp.task('watchFile', function(){
        gulp.watch('src/img/*.{jpg,png,gif,ico}', ['imgMin']);
        gulp.watch('src/**/*.js', ['jsMin']);
        gulp.watch('src/**/*.less', ['styles']);
        gulp.watch('src/**/*.css', ['cssMin']);
    });

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

    gulp.task('default', ['del', 'imgMin', 'jsMin', 'cssMin', 'watchFile']);

参考链接:

Gulp 中文网
gulp插件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 原文标题:Gulp for Beginners作者: Zell Liew翻译:治电小白菜原文地址:https://...
    ZZES_ZCDC阅读 1,577评论 6 18
  • gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学...
    依依玖玥阅读 3,150评论 7 55
  • 1、gulp的安装 首先确保你已经正确安装了nodejs环境。然后以全局方式安装gulp: npm install...
    F_imok阅读 2,370评论 1 11
  • 安装Gulp首先需要安装Node.js,并在控制台输入$ npm install gulp -gMac端需要写成$...
    LaBaby_阅读 913评论 0 1
  • gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学...
    井皮皮阅读 1,294评论 0 10