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 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...
随机推荐
- nutch-1.7-二次开发-Content中增加编码
1 识别nutch-1.7的编码,完成 以前1.2是在 org.apache.nutch.parse.html.HtmlParser EncodingDetector detector = new E ...
- 关于如何设置reduce的个数
在默认情况下,一个MapReduce Job如果不设置Reducer的个数,那么Reducer的个数为1.具体,可以通过JobConf.setNumReduceTasks(int numOfReduc ...
- C语言嵌入式系统编程修炼之一:背景篇
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...
- 搭建DirectUi开发平台
DirectUi的效果可以使用GDI.GDI+.DirectX.OpenGL实现,常用的有GDI和GDI+,后两种有杀鸡用牛刀的感觉.在网络上能找到此方面的教材 现在的软件越来越多的有很炫目的界面,看 ...
- Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别
首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...
- Oracle RAC学习笔记:基本概念及入门
Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章] oracle 10g real applica ...
- ipython notebook使用教程
在一次师兄(师兄博客地址)的例会汇报中,介绍了ipython notebook,当时觉得很酷炫,渐渐自己使用的时候才发现真的很强大.抽空整理下,找了些资料进行补充,并挨个进行了实现,留个笔记,也欢迎喜 ...
- Postman用法简介-Http请求模拟工具
在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件 ...
- UVA10054 The Necklace
UVA10054 The Necklace 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18806 [思路] 欧拉回路 ...
- Oracle表空间扩展
From:http://blog.csdn.net/starnight_cbj/article/details/7398153 1.查看所有表空间使用情况 select b.file_id 文件ID号 ...