去年用gulp,但一直没有写篇博客,今天有时间无聊写一篇。。。。

什么是gulp?gulp的官网title上对这个工具有一个比较准确的定义,叫做:基于流的自动化构建工具。如果你查看它的网页源代码,还会看到在<meta>标签里有一段更详细的描述:gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务。gulp.js 是基于 Node.js 构建的,利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。gulp.js 源文件和你用来定义任务的 gulp 文件都是通过 JavaScript(或者 CoffeeScript )源码来实现的。

好了废话不多说,直接上代码,下面是我写的gulpfile,里面的一些模块不懂的可以去 => https://www.npmjs.com/ 搜索看使用方法,俗话说看源码是最快的学习途径。。。

  1. 'use strict';
  2. {
  3. let gulp = require(`gulp`);
  4.  
  5. let path = require(`./config.json`);
  6.  
  7. let minifycss = require(`gulp-minify-css`);
  8.  
  9. let postcss = require(`gulp-postcss`);
  10.  
  11. let cssgrace = require(`cssgrace`);
  12.  
  13. let cssnext = require(`postcss-cssnext`);
  14.  
  15. let jshint = require(`gulp-jshint`);
  16.  
  17. let uglify = require(`gulp-uglify`);
  18.  
  19. let fontmin = require(`gulp-fontmin`);
  20.  
  21. let imagesmin = require(`gulp-imagemin`);
  22.  
  23. let pngquant = require(`imagemin-pngquant`);
  24.  
  25. let through = require(`through2`);
  26.  
  27. let html = require(`html-minifier`).minify;
  28.  
  29. let cheerio = require(`cheerio`);
  30.  
  31. let clean = require(`gulp-clean`);
  32.  
  33. let rename = require(`gulp-rename`);
  34.  
  35. let browserSync = require(`browser-sync`);
  36.  
  37. let reload = browserSync.reload;
  38.  
  39. let processors = [
  40. cssnext(),
  41. cssgrace
  42. ];
  43.  
  44. gulp.task(`browser-sync`, () => {
  45. return browserSync({
  46. port:8080,
  47. open:true,
  48. server: {
  49. baseDir: `./build`
  50. }
  51. });
  52. });
  53.  
  54. gulp.task(`css`,() => {
  55. return gulp.src(path.src.css)
  56. .pipe(postcss(processors))
  57. .pipe(rename({suffix: `.min`}))
  58. .pipe(minifycss())
  59. .pipe(gulp.dest(path.build.css))
  60. .pipe(reload({stream: true}));
  61.  
  62. });
  63.  
  64. gulp.task(`lint`,() => {
  65. return gulp.src(path.src.js)
  66. .pipe(jshint())
  67. .pipe(jshint.reporter(`default`));
  68. });
  69.  
  70. gulp.task(`script`,() => {
  71. return gulp.src(path.src.js)
  72. .pipe(uglify())
  73. .pipe(rename({suffix: `.min`}))
  74. .pipe(gulp.dest(path.build.js))
  75. .pipe(reload({stream: true}));
  76. });
  77.  
  78. gulp.task(`fonts`, (cb) => {
  79.  
  80. let buffers = [];
  81.  
  82. gulp.src(path.src.html)
  83. .on(`data`, (file) => {
  84. buffers.push(file.contents);
  85. })
  86. .on(`end`, () => {
  87. let text = Buffer.concat(buffers).toString(`utf-8`);
  88. return minifyFont(text, cb);
  89. });
  90. });
  91.  
  92. gulp.task(`img`, () => {
  93. return gulp.src(path.src.img)
  94. .pipe(imagesmin({
  95. progressive: true,
  96. use: [pngquant()]
  97. }))
  98. .pipe(gulp.dest(path.build.img))
  99. .pipe(reload({stream: true}));;
  100. });
  101.  
  102. gulp.task(`html`, () => {
  103.  
  104. return gulp.src(path.src.html)
  105.  
  106. .pipe(through.obj( (file, encode,cb) => {
  107.  
  108. let content = file.contents.toString(encode);
  109.  
  110. let $ = cheerio.load(content,{decodeEntities:false});
  111.  
  112. let aLink = $(`link`);
  113.  
  114. let aScript = $(`script`);
  115.  
  116. rep($,aLink);
  117.  
  118. rep($,aScript);
  119.  
  120. content = $.html();
  121.  
  122. let miniHtml = html(content,{
  123. minifyCSS:true,
  124. minifyJS:true,
  125. collapseWhitespace:true,
  126. removeAttributeQuotes:true
  127. });
  128. file.contents = new Buffer(miniHtml,encode);
  129. cb(null,file,encode);
  130. }))
  131. .pipe(gulp.dest(path.build.html))
  132. .pipe(reload({stream: true}));
  133. });
  134.  
  135. gulp.task(`ico`, () => {
  136. return gulp.src(path.src.ico)
  137. .pipe(gulp.dest(path.build.html));
  138. });
  139.  
  140. gulp.task(`clean`, () => {
  141.  
  142. return gulp.src([path.build.html], {read: false})
  143.  
  144. .pipe(clean());
  145. });
  146.  
  147. gulp.task(`default`,[`clean`], () => {
  148. gulp.start(`browser-sync`, `lint`, `html`, `fonts`, `script`, `img`, `css`, `ico`);
  149. gulp.watch(path.src.html, [`html`]);
  150. gulp.watch(path.src.css, [`css`]);
  151. gulp.watch(path.src.images, [`img`]);
  152. gulp.watch(path.src.js, [`script`]);
  153. gulp.watch(path.src.fonts, [`fonts`]);
  154. });
  155.  
  156. let rep = ($,hrefs) => {
  157.  
  158. hrefs.each((index, item) => {
  159.  
  160. let oLink = $(item);
  161.  
  162. if(oLink.attr(`rel`) === `stylesheet`){
  163.  
  164. let href = oLink.attr(`href`).replace(/\.\w+$/g,(str) => {
  165. return `.min${str}`;
  166. });
  167.  
  168. oLink.attr(`href`,href);
  169.  
  170. }else if(oLink.attr(`type`) === `text/javascript`){
  171.  
  172. let href = oLink.attr(`src`).replace(/\.\w+$/g,(str) => {
  173. return `.min${str}`;
  174. });
  175.  
  176. oLink.attr(`src`,href);
  177.  
  178. }
  179. });
  180.  
  181. };
  182.  
  183. let minifyFont = (text, cb) => {
  184. return gulp.src(path.src.fonts)
  185. .pipe(fontmin({
  186. text: text
  187. }))
  188. .pipe(gulp.dest(path.build.fonts))
  189. .on(`end`, cb);
  190. };
  191. }

gulp一些基础用法可以去 http://www.imooc.com/course/list 看看,很不错的,我给66个赞。。。

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 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...

随机推荐

  1. BZOJ 4010 菜肴制作

    Description 知名美食家小A被邀请至ATM 大酒店,为其品评菜肴. ATM酒店为小A准备了\(N\)道菜肴,酒店按照为菜肴预估的质量从高到低给予\(1\)到\(N\)的顺序编号,预估质量最高 ...

  2. 小游戏 Lights Out (关灯) 的求解 —— 异或方程组

    Author : Evensgn  Blog Link : http://www.cnblogs.com/JoeFan/ Article Link : http://www.cnblogs.com/J ...

  3. uva 1203 - Argus

    简单的优先队列的应用: 代码: #include<queue> #include<cstdio> using namespace std; struct node { int ...

  4. 使用HttpServletRequestWrapper在filter修改request参数

    javax.servlet.ServletRequest中的 Map<String, String[]> parameterMap = request.getParameterMap(); ...

  5. 使用m2eclipse搭建Web项目

    这篇文章已经指导好了:http://www.cnblogs.com/quanyongan/archive/2013/04/21/3033838.html

  6. ZOJ- 3640 Help Me Escape

    Help Me Escape Time Limit: 2 Seconds      Memory Limit: 32768 KB Background     If thou doest well, ...

  7. 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 实现原型模式 原型模式带来的好处就是,想要构建生成任意独特对象的 ...

  8. Android客户端调用Asp.net的WebService

    Android客户端调用Asp.net的WebService 我来说两句 |2011-11-23 13:39:15 在Android端为了与服务器端进行通信有几种方法:1.Socket通信2.WCF通 ...

  9. EasyWebServer编写CGI程序的环境变量

    示例: SERVER_SOFTWARE=EasyWebServer/1.9 SERVER_PROTOCOL=HTTP/1.1 SERVER_PORT= SERVER_NAME=aozima-noteb ...

  10. poj 1564 Sum It Up【dfs+去重】

    Sum It Up Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6682   Accepted: 3475 Descrip ...