Gulp是一个基于任务的javascript工程命令行流式构建工具。为什么要用Gulp呢?前端开发进入到工程化阶段,我们需要压缩合并文件,加MD5戳;如果使用 CoffeeScript/ES6 去代替 Javascript,那么需要编译成jacascript;如果使用less或者sass,需要编译成css。所有的这些操作,在修改文件后,都要重新执行一遍,非常的繁琐。Gulp就是为我们完成这一套重复而机械的工作的。他可以在自动检测文件,每次发生修改,自动编译打包等。

下面介绍用法。

首先安装gulp。在桌面新建一个文件夹,进入文件夹中执行npm init。默认安装即可。这样帮我们快速构建一个工程。

C:\Users\Admin>cd Desktop

C:\Users\Admin\Desktop>mkdir gulpTest

C:\Users\Admin\Desktop>cd gulpTest

C:\Users\Admin\Desktop\gulpTest>npm init

然后在工程目录下安装我们需要的插件:

C:\Users\Admin\Desktop\gulpTest>npm install gulp gulp-sass gulp-autoprefixer browser-sync --save-dev

browser-sync插件可以帮助我们自动刷新浏览器。

安装完成后,在gulpTest文件夹下新建一个文件夹app,存放我们的html等,然后在新建一个文件gulpfile.js。

接下来就是重点gulpfile怎么写了,首先先引入插件:

var gulp = require('gulp');
var sass = require('gulp-sass');
var browserSync = require('browser-sync');
var autoperfixer = require('gulp-autoperfixer');

然后建一个browserSync的reload实例:

var reload = browserSync.reload;

接下来就可以编写任务了,举个例子,修改文件后自动编译less/sass:

//less编译任务
gulp.task('less', function() { //创建一个gulp任务,任务名字是'less',然后一个回调函数
return gulp.src(paths)    //gulp任务操作的源文件'paths'
.pipe(less()) //执行less编译
.pipe(gulp.dest('./css')); //gulp任务输出的新文件
});
//watch监听任务
gulp.task('watch', function(){ //创建第二个gulp任务,任务名字是‘watch',然后一个回调函数
gulp.watch(paths,['less']); //gulp的watch监听,文件改动后立即重新执行less任务 可参考http://www.gulpjs.com.cn/docs/api/
});
//gulp.watch('default',['less']);
gulp.task('default', ['less','watch']);  //gulp的default任务,相当于glup的执行入口。然后把less任务和watch放进来,该脚本就会执行这两个任务

下面直接贴几个task代码:

一、压缩css

var minifycss = require('gulp-minify-css');//引用插件,需npm install --save-dev gulp-minify-css
gulp.task('minifycss', function() {
return gulp.src('src/css/*.css') //压缩的文件
.pipe(minifycss()) //执行压缩
.pipe(gulp.dest('dst/css')); //输出文件夹
});

二、压缩js

var concat = require('gulp-concat'),

    uglify = require('gulp-uglify'),

    rename = require('gulp-rename');  //引用插件,需npm install --save-dev xxxxxx

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

    return gulp.src('src/*.js')  //操作的源文件

        .pipe(concat('main.js'))    //合并所有js到main.js

        .pipe(gulp.dest('minified/js'))    //输出main.js到文件夹

        .pipe(rename({suffix: '.min'}))   //rename压缩后的文件名

        .pipe(uglify())    //压缩

        .pipe(gulp.dest('minified/js'));  //输出

});

三、清空输出目录

var del =require('del');
gulp.task('clean', function() {
return del(['dst']);  //'dst'是一个目录
});
四、压缩图片
const imagemin = require('gulp-imagemin');

gulp.task('default', function(){
return gulp.src('src/images/*')
.pipe(imagemin())
.pipe(gulp.dest('dist/images'));
});
五、压缩html
var gulp = require('gulp'),
htmlmin = require('gulp-htmlmin'); gulp.task('htmlMin', function () {
var options = {
removeComments: true,//清除HTML注释
collapseWhitespace: true,//压缩HTML
collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
minifyJS: true,//压缩页面JS
minifyCSS: true//压缩页面CSS
};
gulp.src('src/*.html')
.pipe(htmlmin(options))
.pipe(gulp.dest('dst'));
});
六、合并文件
var concat = require('gulp-concat');

gulp.task('concat', function () {
gulp.src('src/js/*.js')
.pipe(concat('all.js'))//合并后的文件名
.pipe(gulp.dest('dist/js'));
});
七、css自动处理浏览器前缀,如添加-webkit-解决浏览器兼容问题
var autoprefixer = require('gulp-autoprefixer');

gulp.task('autoprefixer', function () {
gulp.src('css/index.css')
.pipe(autoprefixer())
.pipe(gulp.dest('dist/css'));
});
 八、给文件加上MD5戳
var rev = require('gulp-rev');
gulp.task('rev', function() {
return gulp.src([config.src + config.resource])
.pipe(rev())        //加上MD5戳
.pipe(gulp.dest(config.app))//输出文件
.pipe(rev.manifest())//生成rev-manifest.json,该文件用于替换HTML CSS文件中引用的MD5文件路径
.pipe(gulp.dest(config.rev))//rev-manifest.json文件放在rev目录下
});
九、给html css文件替换路径
var revCollector = require('gulp-rev-collector');

gulp.task('revCollector', function() {
return gulp.src(['rev/*.json', 'config/*.css','config/*.html']) //读取 rev-manifest.json 文件以及需要进行文件名替换的文件
.pipe(revCollector({
replaceReved: true
})) //执行文件内引用名的替换
.pipe(gulp.dest('config/app')); //替换后的文件输出的目录
});
十、修改文件后自动刷新浏览器
browserSync = require('browser-sync');
var reload = browserSync.reload;
gulp.task('watch',function(){
browserSync({
server:{
baseDir:'./src'  //设置项目根目录,由此启动一个服务器
}
});
gulp.watch('src/*.html',reload);//监听html文件,文件变动马上自动刷新浏览器页面
});
当设定的文件发生变动时,会自动启动一个本地服务器localhost:3000,然后读取baseDir中的目录。

如果你的文件就在服务器里,代码需要修改成这样

// 代理
gulp.task('watch', function() {
browserSync.init({
proxy: "你的域名或IP"
});
  gulp.watch('src/*.html',reload);//监听html文件,文件变动马上自动刷新浏览器页面
});

以及几个gulp命令:

gulp.task(name, fn)//新建一个gulp任务,name是任务名,fn回调函数

gulp.run(tasks...)//尽可能多的并行运行多个task 新版本中的gulp中使用run会发出警告,这样的情况下我们可以用start代替

gulp.watch(glob, fn//)当glob内容发生改变时,执行fn

gulp.src(glob)//返回一个可读的stream

gulp.dest(glob)//返回一个可写的stream

编写完gulpfile之后就可以在cmd执行gulp来完成命令了。

ending~

自动化前端构建工具--gulp的更多相关文章

  1. (转载)前端构建工具gulp使用

    前端构建工具gulp使用 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中 ...

  2. 前端构建工具gulp

    前端构建工具gulp使用   前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gul ...

  3. (转)前端构建工具gulp入门教程

    前端构建工具gulp入门教程 老婆婆 1.8k 2013年12月30日 发布 推荐 10 推荐 收藏 83 收藏,20k 浏览 本文假设你之前没有用过任何任务脚本(task runner)和命令行工具 ...

  4. 前端构建工具gulp使用

    前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...

  5. 前端构建工具 Gulp.js 上手实例

    在软件开发中使用自动化构建工具的好处是显而易见的.通过工具自动化运行大量单调乏味.重复性的任务,比如图像压缩.文件合并.代码压缩.单元测试等等,可以为开发者节约大量的时间,使我们能够专注于真正重要的. ...

  6. 前端读者 | 前端构建工具Gulp

    @羯瑞 整理 前言 前端工具现在层出不穷,网上搜下一大片,就看你怎么去使用了,基于项目看用什么样的构建工具.有的工具提供的功能还是非常强大的. FIS.百度团队的产品.现在百度的多个产品中使用.面向前 ...

  7. 前端构建工具gulp使用 (转)

    http://www.cnblogs.com/starof/p/5194622.html 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 ...

  8. 前端构建工具gulp介绍

    2016年3月3日 10:46:08     晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...

  9. 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5

    Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...

随机推荐

  1. ajax-向服务器发送请求

    ajax-向服务器发送请求 1.将请求发送到服务器,使用XMLHttpRequest对象的 open() 和 send() 方法.     xmlhttp. open(method,url,async ...

  2. opencart在空间中安装出错,连接不上mysql

    客户要求,要在国外某空间安装opencart.话说opencart根本没怎么搞过,也不太清楚,php也是半吊子,临时看了几天,硬着头皮上把. 出错,安装进行到数据库连接设置的时候,死活连接不上,开始以 ...

  3. HackerRank "Equal Stacks"

    Greedy - though simple, but fun! #include <vector> #include <iostream> using namespace s ...

  4. ubuntu死机怎么办

    在使用ubuntu的时候由于各种复杂的因素,如软件不兼容,误操作等问题导致"死机"怎么办呢?下面我们来看看如何解决这问题...   可以打开终端模拟器   1 ctrl+alt+t ...

  5. 黄聪:HtmlAgilityPack中SelectSingleNode的XPath和CSS选择器

    XPath和CSS选择器 原文:http://ejohn.org/blog/xpath-css-selectors 最近,我做了很多工作来实现一个同时支持XPath和CSS 3的解析器,令我惊讶的是: ...

  6. GUI(图形用户界面)

    ylbtech-Miscellaneos:GUI(图形用户界面) A,返回顶部 1, 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显 ...

  7. Python文本处理——中文标点符号处理

    中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏.以下为在下处理中文标点的时候采用的两种方法,如有更好的工具,请推荐补充. 中文标点集合 比较常见标点有这 ...

  8. 采用CAS原理构建单点登录

    企业的信息化过程是一个循序渐进的过程,在企业各个业务网站逐步建设的过程中,根据各种业务信息水平的需要构建了相应的应用系统,由于这些应用系统一般是在不同的时期开发完成的,各应用系统由于功能侧重.设计方法 ...

  9. [ActionScript 3.0] 将组件 SWC 文件导入 Flash

    在向其它开发人员分发组件时,您可以包含以下说明,以便他们能够立即安装和使用组件.  导入 SWC 文件: 将 SWC 文件复制到 Configuration/Components 目录中. 重新启动 ...

  10. lucene 内存索引 和文件索引 合并

    IndexWriter.addIndexes(ramDirectory); http://blog.csdn.net/qq_28042463/article/details/51538283 在luc ...