gulp的点点滴滴
去年用gulp,但一直没有写篇博客,今天有时间无聊写一篇。。。。
什么是gulp?gulp的官网title上对这个工具有一个比较准确的定义,叫做:基于流的自动化构建工具。如果你查看它的网页源代码,还会看到在<meta>标签里有一段更详细的描述:gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务。gulp.js 是基于 Node.js 构建的,利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。gulp.js 源文件和你用来定义任务的 gulp 文件都是通过 JavaScript(或者 CoffeeScript )源码来实现的。
好了废话不多说,直接上代码,下面是我写的gulpfile,里面的一些模块不懂的可以去 => https://www.npmjs.com/ 搜索看使用方法,俗话说看源码是最快的学习途径。。。
'use strict'; { let gulp = require(`gulp`); let path = require(`./config.json`); let minifycss = require(`gulp-minify-css`); let postcss = require(`gulp-postcss`); let cssgrace = require(`cssgrace`); let cssnext = require(`postcss-cssnext`); let jshint = require(`gulp-jshint`); let uglify = require(`gulp-uglify`); let fontmin = require(`gulp-fontmin`); let imagesmin = require(`gulp-imagemin`); let pngquant = require(`imagemin-pngquant`); let through = require(`through2`); let html = require(`html-minifier`).minify; let cheerio = require(`cheerio`); let clean = require(`gulp-clean`); let rename = require(`gulp-rename`); let browserSync = require(`browser-sync`); let reload = browserSync.reload; let processors = [ cssnext(), cssgrace ]; gulp.task(`browser-sync`, () => { return browserSync({ port:8080, open:true, server: { baseDir: `./build` } }); }); gulp.task(`css`,() => { return gulp.src(path.src.css) .pipe(postcss(processors)) .pipe(rename({suffix: `.min`})) .pipe(minifycss()) .pipe(gulp.dest(path.build.css)) .pipe(reload({stream: true})); }); gulp.task(`lint`,() => { return gulp.src(path.src.js) .pipe(jshint()) .pipe(jshint.reporter(`default`)); }); gulp.task(`script`,() => { return gulp.src(path.src.js) .pipe(uglify()) .pipe(rename({suffix: `.min`})) .pipe(gulp.dest(path.build.js)) .pipe(reload({stream: true})); }); gulp.task(`fonts`, (cb) => { let buffers = []; gulp.src(path.src.html) .on(`data`, (file) => { buffers.push(file.contents); }) .on(`end`, () => { let text = Buffer.concat(buffers).toString(`utf-8`); return minifyFont(text, cb); }); }); gulp.task(`img`, () => { return gulp.src(path.src.img) .pipe(imagesmin({ progressive: true, use: [pngquant()] })) .pipe(gulp.dest(path.build.img)) .pipe(reload({stream: true}));; }); gulp.task(`html`, () => { return gulp.src(path.src.html) .pipe(through.obj( (file, encode,cb) => { let content = file.contents.toString(encode); let $ = cheerio.load(content,{decodeEntities:false}); let aLink = $(`link`); let aScript = $(`script`); rep($,aLink); rep($,aScript); content = $.html(); let miniHtml = html(content,{ minifyCSS:true, minifyJS:true, collapseWhitespace:true, removeAttributeQuotes:true }); file.contents = new Buffer(miniHtml,encode); cb(null,file,encode); })) .pipe(gulp.dest(path.build.html)) .pipe(reload({stream: true})); }); gulp.task(`ico`, () => { return gulp.src(path.src.ico) .pipe(gulp.dest(path.build.html)); }); gulp.task(`clean`, () => { return gulp.src([path.build.html], {read: false}) .pipe(clean()); }); gulp.task(`default`,[`clean`], () => { gulp.start(`browser-sync`, `lint`, `html`, `fonts`, `script`, `img`, `css`, `ico`); gulp.watch(path.src.html, [`html`]); gulp.watch(path.src.css, [`css`]); gulp.watch(path.src.images, [`img`]); gulp.watch(path.src.js, [`script`]); gulp.watch(path.src.fonts, [`fonts`]); }); let rep = ($,hrefs) => { hrefs.each((index, item) => { let oLink = $(item); if(oLink.attr(`rel`) === `stylesheet`){ let href = oLink.attr(`href`).replace(/\.\w+$/g,(str) => { return `.min${str}`; }); oLink.attr(`href`,href); }else if(oLink.attr(`type`) === `text/javascript`){ let href = oLink.attr(`src`).replace(/\.\w+$/g,(str) => { return `.min${str}`; }); oLink.attr(`src`,href); } }); }; let minifyFont = (text, cb) => { return gulp.src(path.src.fonts) .pipe(fontmin({ text: text })) .pipe(gulp.dest(path.build.fonts)) .on(`end`, cb); }; }
gulp一些基础用法可以去 http://www.imooc.com/course/list 看看,很不错的,我给66个赞。。。
gulp的点点滴滴的更多相关文章
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)
相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...
- 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- 做一个gulp+webpack+vue的单页应用开发架子
1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...
- 前端自动化构建工具gulp记录
一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...
- gulp初学
原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js 配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...
- gulp批量打包文件并提取公共文件
gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...
随机推荐
- fineuploader 上传jquery 控件
fineuploader 昨天用的一个jquery插件. 可参考这篇文章以前写的 file-uploader 跟 这个跟里面介绍的2个jquery 插件相比.觉得更强大写..版本号都3.9 了….. ...
- 【UVA1378】A Funny Stone Game (博弈-求SG值-输出方案)
[题目] Description The funny stone game is coming. There are n piles of stones, numbered with 0, 1, 2, ...
- mysql视图的作用(详细)
测试表:user有id,name,age,sex字段 测试表:goods有id,name,price字段 测试表:ug有id,userid,goodsid字段 视图的作用实在是太强大了,以下是我体验过 ...
- VC6.0 list sort出错
在STL中,排序是个很重要的话题. 1.algorithm 里的sort()只接收RandomAccessIterator用于像vector,dequeue的排序 2.像set,map,这种关联式容器 ...
- translate函数使用
SQL> select data,translate(data,'0123456789','##########') as num1, replace(translate(data,'01234 ...
- Java位运算在程序设计中的使用:位掩码(BitMask)
在Java中,位运算符有很多,例如与(&).非(~).或(|).异或(^).移位(<<和>>)等.这些运算符在日常编码中很少会用到. 在下面的一个例子中,会用到位掩码( ...
- 【HDOJ】1924 CIVIC DILL MIX
简单字符串. #include <cstdio> #include <cstring> #define MAXN 55 char srca[MAXN], cas[MAXN], ...
- QQ游戏百万人同时在线服务器架构实现
转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...
- HashMap循环遍历方式及其性能对比
主要介绍HashMap的四种循环遍历方式,各种方式的性能测试对比,根据HashMap的源码实现分析性能结果,总结结论. 1. Map的四种遍历方式 下面只是简单介绍各种遍历示例(以HashMap为 ...
- OA系统配置文件
第一章 web.xml配置文件解读 1. web.xml文件解读 lemon OA系统的核心配置文件都放在spring目录下的具有applicationContext的前缀文件.Classpath后有 ...