一.简介

gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。

在实现上, gulp 借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单.

二.配置文件

var gulp = require('gulp');
var del = require('del');//删除文件/文件夹
var rev = require('gulp-rev');//对文件名加MD5后缀
var nano = require('gulp-cssnano');//删除空白和注释,并且压缩代码
var uglify = require('gulp-uglify');//通过UglifyJS来压缩JS文件
var useref = require('gulp-useref');
var imagemin = require('gulp-imagemin');//压缩图片文件(包括PNG、JPEG、GIF和SVG图片)
var revCollector = require('gulp-rev-collector');//路径替换
var browserSync = require('browser-sync').create();//静态文件服务器,同时也支持浏览器自动刷新
var gulpSequence = require('gulp-sequence');
var uncss = require('gulp-uncss');
var htmlmin = require('gulp-htmlmin');
var base64 = require('gulp-base64');
var changed = require('gulp-changed');
var postcss = require("gulp-postcss");//css预编译器
var sprites = require('postcss-sprites').default;//CSS精灵
var autoprefixer = require('autoprefixer');//自动补全浏览器兼容性前缀
var cssgrace = require('cssgrace');//CSS后处理工具,hackIE var SRC_DIR = './src/';
var PKG_DIR = './tmp/pkg/';
var REV_DIR = './tmp/rev/';
var DST_DIR = './dist/';
var UNCSS_REG = [/.advise/, /.block/, /.g-bd .m-view-2 .category li:nth-child/, /^.g-bd ul li .info/, /.hljs/]; gulp.task('clean', function() {
return del(['dist', 'tmp']);
}); /*
* 合并请求
* <!-- build:css ../css/index.pkg.css --><!-- endbuild -->
* <!-- build:js ../js/index.pkg.js --><!-- endbuild -->
*/
gulp.task('pkg', function() {
return gulp.src(SRC_DIR + 'view/*.html')
.pipe(useref())
.pipe(gulp.dest(PKG_DIR + 'view/'));
}); /*
* 移动非jpg/png资源到img文件夹
*
*/
gulp.task('move-img-other', function() {
return gulp.src([SRC_DIR + 'img/**/*.*!(jpg|png)', SRC_DIR + 'component/img/**/*.*!(jpg|png)'])
.pipe(gulp.dest('./tmp/pkg/img/'));
}); /*
* 压缩IMG
*
*/
gulp.task('min-img', function() {
return gulp.src([SRC_DIR + 'img/**/*.*(jpg|png)', SRC_DIR + 'component/img/**/*.*(jpg|png)'])
.pipe(imagemin())
.pipe(gulp.dest('./tmp/pkg/img/'));
}); /*
* 压缩CSS(PC)
*
*/
gulp.task("min-css-pc", function() {
// PostCSS
var processors = [
sprites({
'stylesheetPath': PKG_DIR + 'css/',
'spritePath': PKG_DIR + 'img/'
}),
autoprefixer({
browsers: ['> 1%', 'last 2 versions', 'ie 6-11']
}),
cssgrace
];
return gulp.src([PKG_DIR + 'css/**/*.css'])
.pipe(nano({
discardComments: {
removeAll: true
}
}))
.pipe(postcss(processors))
.pipe(gulp.dest(PKG_DIR + 'css/'))
}); /*
* 压缩CSS(Mobile)
*
*/
gulp.task("min-css-mobile", function() {
// PostCSS
var processors = [
autoprefixer({
browsers: ['> 1%', 'last 2 versions']
})
];
return gulp.src([PKG_DIR + 'css/**/*.css'])
.pipe(uncss({
html: [PKG_DIR + '**/*.html'],
ignore: UNCSS_REG
})).pipe(nano({
discardComments: {
removeAll: true
}
}))
.pipe(postcss(processors))
.pipe(gulp.dest(PKG_DIR + 'css/'))
}); /*
* 压缩JS
*
*/
gulp.task('min-js', function() {
return gulp.src(PKG_DIR + 'js/**/*.js')
.pipe(uglify())
.pipe(gulp.dest(PKG_DIR + 'js/'));
}); /*
* 版本化IMG
*
*/
gulp.task('rev-img', function() {
return gulp.src(PKG_DIR + 'img/**/*')
.pipe(rev())
.pipe(gulp.dest(REV_DIR + 'img/'))
.pipe(rev.manifest())
.pipe(gulp.dest(REV_DIR + 'img/'));
}); /*
* 版本化CSS
*
*/
gulp.task('rev-css', function() {
return gulp.src(PKG_DIR + 'css/**/*')
.pipe(rev())
.pipe(gulp.dest(REV_DIR + 'css/'))
.pipe(rev.manifest())
.pipe(gulp.dest(REV_DIR + 'css/'));
}); /*
* 版本化JS
*
*/
gulp.task('rev-js', function() {
return gulp.src(PKG_DIR + 'js/**/*')
.pipe(rev())
.pipe(gulp.dest(REV_DIR + 'js/'))
.pipe(rev.manifest())
.pipe(gulp.dest(REV_DIR + 'js/'));
}); /*
* 收集图片到CSS
*/
gulp.task('col-css', function() {
return gulp.src([REV_DIR + 'img/*.json', REV_DIR + 'css/*.css'])
.pipe(revCollector())
.pipe(gulp.dest(DST_DIR + 'css/'));
}); /*
* 移动IMG文件到目标文件夹
*/
gulp.task('col-img', function() {
return gulp.src([REV_DIR + 'img/*', '!' + REV_DIR + '/img/*.json'])
.pipe(gulp.dest(DST_DIR + 'img/'));
}); /*
* 移动JS文件到目标文件夹
*/
gulp.task('col-js', function() {
return gulp.src(REV_DIR + 'js/*.js')
.pipe(gulp.dest(DST_DIR + 'js/'));
}); /*
* 收集资源到HTML
*/
gulp.task('col-html', function() {
return gulp.src([REV_DIR + '**/*.json', PKG_DIR + 'view/*.html'])
.pipe(revCollector())
.pipe(htmlmin({
// collapseWhitespace: true,
removeComments: true
}))
.pipe(gulp.dest(DST_DIR + 'view/'));
}); /*
* 图片base64
*/
gulp.task('base64', function() {
return gulp.src(PKG_DIR + '/**/*.css')
.pipe(base64({
extensions: ['svg', 'png', /\.jpg#datauri$/i],
}))
.pipe(gulp.dest(PKG_DIR));
}); /*
* 移动mock文件夹
*/
gulp.task('move-mock', function() {
return gulp.src(SRC_DIR + 'mock/**/*')
.pipe(gulp.dest(DST_DIR + 'mock/'));
}); /*
* 静态服务器
*/
gulp.task('bs', function() {
browserSync.init({
files: "**", //监听整个项目
open: "external",
server: {
baseDir: "./dist/",
index: 'view/index.html'
}
});
}); /*
* 静态服务器(代理)
*/
gulp.task('bsp', function() {
browserSync.init({
proxy: "127.0.0.1"
});
}); /*
* PC打包方案
*/
gulp.task('pc', gulpSequence(
'clean', 'pkg', 'min-img',
['min-img', 'min-css-pc', 'min-js'], 'move-img-other',
['rev-img', 'rev-css', 'rev-js'],
['col-img', 'col-css', 'col-js', 'col-html'],
'move-mock', 'bs'
)); /*
* Mobile打包方案
*/
gulp.task('mobile', gulpSequence(
'clean', 'pkg', 'min-img', 'base64', 'move-img-other',
['min-img', 'min-css-mobile', 'min-js'],
['rev-img', 'rev-css', 'rev-js'],
['col-img', 'col-css', 'col-js', 'col-html'],
'move-mock', 'bs'
)); gulp.task('default', ['pc'], function() {
return del(['tmp/']);
});

Gulp(一)的更多相关文章

  1. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  2. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  3. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  4. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  5. gulp详细入门教程

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

  6. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  7. 前端自动化构建工具gulp记录

    一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...

  8. gulp初学

    原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js  配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...

  9. gulp批量打包文件并提取公共文件

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...

  10. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

随机推荐

  1. c# const与readonly 关键字的比较

    C#中,const 与readonly是两个比较有用的关键字.const 与 readonly 定义的数据成员在初始化都不能再改变. 比如定义了 public class MathUtitlity   ...

  2. Unity给力插件之LittleLocalization

    从网上随便下载了一个多语言的插件,原理很简单,自己就可以写一个.不过本身插件做的算比较全面,拿来就能用,所以精简了一下,然后重新打了个包. 为了快速使用插件,在此把步骤列出来. 1.创建空物体,添加L ...

  3. Python初始值表示为无穷大

    之前只知道设置变量的初始值为0.今天在写网络路径分析的时候,为了找到离任意坐标距离最近的节点,初始设置最短距离为无穷大,然后不断的去替换,直到找到最近的节点. 刚开始设置是min_dis = 9999 ...

  4. HW4.31

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  5. PL/SQL练习

    简单结构 set serveroutput on; DECLARE v_name ); BEGIN v_name := 'hello'; dbms_output.put_line(v_name); E ...

  6. db2 identity列重置,reset/restart

    db2中可以对表中的某一个列创建identity列,用于自动填充值,某些情况下(比如删除数据后,需要从最小值开始,并不重复,那可以对标识列进行reset操作) 语法: ALTER TABLE < ...

  7. myEclipse和eclipse修改或复制项目名称后-更新部署名称

    一.myEclipse 复制后修改名称,访问不到项目 这是因为,你只是改了项目的名称,而没有改 下面是解决方法: 方法 1.右击你的项目,选择“properties”,在“type filter te ...

  8. Javascript从入门到精通(一)

    第一篇   基础知识 一.JavaScript的主要特点:1.解释性:不同于一些编译性的程序语言(如C.C++等),它是一种解释性的程序语言,它的源代码不需要经过编译,而是直接在浏览器中运行时被解释. ...

  9. 找出数组中出现奇数次的元素<异或的应用>

    点击打开链接:百度面试题之找出数组中之出现一次的两个数(异或的巧妙应用) 题目描述|:给定一个包含n个整数的数组a,其中只有一个整数出现奇数次,其他整数都出现偶数次,请找出这个整数 使用异或操作,因为 ...

  10. PL/SQL:使用pragma restrict_references限制包权限

    在看别人的代码的时候.发现了例如以下的编译指令. pragma restrict_references(get_attribute_name, wnds); get_attribute_name是一个 ...