Glup用自动化构建工具增强你的工作流程!
同类型的软件还有Grunt。关于两者的区别可以参考这篇文章Grunt VS Gulp

安装:

$ npm install gulp -g
$ npm install gulp --save-dev

安装一饮而尽插件

安装一些插件,完成下列任务:

  1. 编译Sass(gulp-ruby-sass
  2. Autoprefixer(gulp-autoprefixer
  3. 缩小化(minify)CSS(gulp-minify-css
  4. JSHintgulp-jshint
  5. 拼接(gulp -concat
  6. 丑化(Uglify)(gulp - uglify )
  7. 图片压缩(gulp-imagemin
  8. 即时重整(LiveReload)(gulp-livereload
  9. 清理档案(gulp -clean
  10. 图片快取,只有更改过得图片会进行压缩(gulp -cache
  11. 更多通知(gulp -notify
$ npm install gulp-ruby-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-clean gulp-notify gulp-rename gulp-livereload gulp-cache --save-dev

载入插件

接下来,我们需要建立一个gulpfile.js档案,并且载入这些插件:

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'),
clean = require('gulp-clean'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload');

建立任务

下面是任务的最基本形态,在gulpfile.js文件中

var gulp = require('gulp');

gulp.task('default', function() {
// 将你的默认的任务代码放在这
});

可以通过如下命令来执行任务:

$ gulp default

我们设置编译萨斯我们将编译无礼,接着通过Autoprefixer,最后储存结果到我们的目的地接着产生一个缩小化的.min版本,自动重新整理页面及通知任务已经完成。:

gulp.task('styles', function() {
return gulp.src('src/styles/main.scss')
.pipe(sass({ style: 'expanded' }))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('dist/assets/css'))
.pipe(rename({suffix: '.min'}))
.pipe(minifycss())
.pipe(gulp.dest('dist/assets/css'))
.pipe(notify({ message: 'Styles task complete' }));
});

吞掉基本API

  • gulp.src(globs [,options])
  • gulp.dest(path [,options])
  • gulp.task(name [,deps],fn)
  • gulp.watch(glob [,opts],tasks)

gulp.src(globs [,options])

输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件。将返回一个Vinyl files可以被管道到别的插件中。

gulp.dest(path [,options])

能被管进来,并且将会写文件。并且重新输出(emits)所有数据,因此你可以将它管到多个文件夹。如果某文件夹不存在,将会自动创建它。

gulp.src('./client/templates/*.jade')
.pipe(jade())
.pipe(gulp.dest('./build/templates'))
.pipe(minify())
.pipe(gulp.dest('./build/minified_templates'));

文件被写入的路径是以所给的相对路径根据所给的目标目录计算而来。类似的,相对路径也可以根据所给的基地来计算。请查看上述的gulp.src来了解更多信息。

gulp.task(name [,deps],fn)

gulp.watch(glob [,opts],tasks)或gulp.watch(glob [,opts,cb])

监视文件,并且可以在文件发生改动时候做一些事情。它总会返回一个EventEmitter来发射(emit)change事件。
例如:需要在文件变动后执行的一个或者多个通过gulp.task()创建的任务的名字

var watcher = gulp.watch('js/**/*.js', ['uglify','reload']);
watcher.on('change', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
gulp.watch('js/**/*.js', function(event) {
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});

使用例子:

  1. 编译萨斯,Autoprefix及缩小化
gulp.task('styles', function() {
return gulp.src('src/styles/main.scss')
.pipe(sass({ style: 'expanded' }))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('dist/assets/css'))
.pipe(rename({suffix: '.min'}))
.pipe(minifycss())
.pipe(gulp.dest('dist/assets/css'))
.pipe(notify({ message: 'Styles task complete' }));
});
  1. JSHint,拼接及缩小化的JavaScript
gulp.task('scripts', function() {
return gulp.src('src/scripts/**/*.js')
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(gulp.dest('dist/assets/js'))
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(gulp.dest('dist/assets/js'))
.pipe(notify({ message: 'Scripts task complete' }));
});
  1. 图片压缩
gulp.task('images', function() {
return gulp.src('src/images/**/*')
.pipe(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))
.pipe(gulp.dest('dist/assets/img'))
.pipe(notify({ message: 'Images task complete' }));
});
  1. !干净收拾
    在我们进行布署之前,清除目的地目录并重建档案是一个好主意-以防万一任何已经被删除的来源档案遗留在目的地目录之中:
gulp.task('clean', function() {
return gulp.src(['dist/assets/css', 'dist/assets/js', 'dist/assets/img'], {read: false})
.pipe(clean());
});

我们可以传入一个目录(或档案)阵列到gulp.src。因为我们不想要读取已经被删除的档案,我们可以加入阅读:false选项来防止gulp读取档案内容 - 让它快一些。

  1. 预设任务
    我们可以建立一个预设任务,当只输入$ gulp指令时执行的任务,这里执行三个我们所建立的任务:
gulp.task('default', ['clean'], function() {
gulp.start('styles', 'scripts', 'images');
});

注意额外传入gulp.task的阵列。这里我们可以定义任务相依(任务依赖)。在这个范例中,gulp.start开始任务前会先执行清理(clean)任务.Gulp中所有的任务都是并行(兼)执行,并没有先后顺序哪个任务会先完成,所以我们需要确保清洁任务在其他任务开始前完成。

  1. 看守
    为了能够看守档案,并在更动发生后执行相关任务,首先需要建立一个新的任务,使用gulp.watchAPI来看守档案:
gulp.task('watch', function() {
// 看守所有.scss档
gulp.watch('src/styles/**/*.scss', ['styles']);
// 看守所有.js档
gulp.watch('src/scripts/**/*.js', ['scripts']);
// 看守所有图片档
gulp.watch('src/images/**/*', ['images']);
});
  1. 即时重整(LiveReload)
    Gulp也可以处理档案更动后,自动重新整理页面。我们需要修改观察任务,设置即时重整伺服器。
// 载入外挂
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'),
clean = require('gulp-clean'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload');
// 样式
gulp.task('styles', function() {
return gulp.src('src/styles/main.scss')
.pipe(sass({ style: 'expanded', }))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('dist/styles'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('dist/styles'))
.pipe(notify({ message: 'Styles task complete' }));
});
// 脚本
gulp.task('scripts', function() {
return gulp.src('src/scripts/**/*.js')
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(gulp.dest('dist/scripts'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('dist/scripts'))
.pipe(notify({ message: 'Scripts task complete' }));
});
// 图片
gulp.task('images', function() {
return gulp.src('src/images/**/*')
.pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
.pipe(gulp.dest('dist/images'))
.pipe(notify({ message: 'Images task complete' }));
});
// 清理
gulp.task('clean', function() {
return gulp.src(['dist/styles', 'dist/scripts', 'dist/images'], {read: false})
.pipe(clean());
});
// 预设任务
gulp.task('default', ['clean'], function() {
gulp.start('styles', 'scripts', 'images');
});
// 看手
gulp.task('watch', function() {
// 看守所有.scss档
gulp.watch('src/styles/**/*.scss', ['styles']);
// 看守所有.js档
gulp.watch('src/scripts/**/*.js', ['scripts']);
// 看守所有图片档
gulp.watch('src/images/**/*', ['images']);
// 建立即时重整伺服器
var server = livereload();
// 看守所有位在 dist/ 目录下的档案,一旦有更动,便进行重整
gulp.watch(['dist/**']).on('change', function(file) {
server.changed(file.path);
});
});
 

Gulp简明使用教程的更多相关文章

  1. WebPack 简明学习教程

    WebPack 简明学习教程 字数1291 阅读22812 评论11 喜欢35 WebPack是什么 一个打包工具 一个模块加载工具 各种资源都可以当成模块来处理 网站 http://webpack. ...

  2. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  3. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  4. gulp详细入门教程(转载)

    本文转载自: gulp详细入门教程

  5. (原+转)简明 Python 教程:总结

     简明 Python 教程 说明:本文只是对<简明Python教程>的一个总结.请搜索该书查看真正的教程. 第3章 最初的步骤 1. Python是大小写敏感的. 2. 在#符号右面的内容 ...

  6. 笔记|《简明Python教程》:编程小白的第一本python入门书

    <简明Python教程>这本书是初级的Python入门教材,初级内容基本覆盖,对高级内容没有做深入纠结.适合刚接触Python的新手,行文比较简洁轻松,读起来也比较顺畅. 下面是我根据各个 ...

  7. OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Redis使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  8. OsharpNS轻量级.net core快速开发框架简明入门教程-从零开始启动Osharp

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  9. OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

随机推荐

  1. fiddler接口测试,js代码修改日志展示(埋点用)

    fiddler 通过fiddler 发送接口信息: http://blog.csdn.net/java2013liu/article/details/53380381 rules--automatic ...

  2. mac host文件配置

    Shift+Command+G 三个组合按键,并输入 Hosts 文件的所在路径:/etc/hosts /private/etc/hosts

  3. HTML学习笔记Day12

    一.CSS3基础 (一)css3概念及优势 概念:CSS3是css技术的升级版本,CSS3语言开发是朝着模块化发展的.以前的规范作为一个模块实在是太庞大而且比较复杂,所以,把它分解为一些小的模块,更多 ...

  4. nginx安装配置: configure命令

    configure命令用来配置nginx编译环境. 该命令定义了系统各方面功能,包括允许nginx使用的连接处理方式. 其执行结果是生成一个Makefile文件. configure命令支持如下参数: ...

  5. Druid数据源配置

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-met ...

  6. Java封装、继承整理

    封装 3.1封装概念: 提高代码复用性 隐藏实现细节,对外访问提供公共接口 提高安全型 3.2封装举例 机箱就是隐藏实现细节,提供了公共的访问接口 3.3私有private 一般对成员属性的访问动作: ...

  7. flask form表单验证

    新建forms.py文件 #!/usr/bin/env python #-*-coding:utf--*- #导入模块 from flask_wtf import FlaskForm #FlaskFo ...

  8. 1.单件模式(Singleton Pattern)

    创建型模式---单件模式(Singleton Pattern)动机(Motivation):    在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性. ...

  9. extern "C" 含义

    extern "C" 被 extern 限定的函数或变量是 extern 类型的 被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和链接的 e ...

  10. 流媒体技术学习笔记之(十八)互联网草案HTTP直播流2017年5月

    原文地址:https://tools.ietf.org/html/draft-pantos-http-live-streaming-23 1.HTTP直播流介绍 HTTP实时流媒体提供了一个可靠的,成 ...