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 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...
随机推荐
- -Xms -Xmx -Xmn -Xss -XX:
这两天遇到了pergen space的问题,在晚上查了查发现还挺普遍,并且通过eclipse启动,通过bat启动或者linux下通过sh启动,处理方式是不一样的,不过都是调整jvm的大小 如果有遇到同 ...
- 使用spm build 批量打包压缩seajs 代码
一,安装环境 1.安装spm spm工具是基于node(nodejs的服务平台)的,因此我们需要先安装 node 和 npm 下载地址:http://nodejs.org/#download.下载完成 ...
- BZOJ 1876 SuperGCD
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求 ...
- The Lost Art of C Structure Packing
对齐要求 首先需要了解的是,对于现代处理器,C编译器在内存中放置基本C数据类型的方式受到约束,以令内存的访问速度更快. 在x86或ARM处理器中,基本C数据类型通常并不存储于内存中的随机字节地址.实际 ...
- 【HTTP】HTTP access control (CORS)
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS Cross-site HTTP requests are H ...
- eclipse设置字体大小
eclipse是我们常用的开发工具.eclipse中的默认字体往往并不满足我们的需要,我经常要调节一下它的大小或者换一下风格.eclipse中的字体大小怎么改变呢? 工具/原料 eclipse 方法/ ...
- WPF Image控件中的ImageSource与Bitmap的互相转换
原文:WPF Image控件中的ImageSource与Bitmap的互相转换 1.从bitmap转换成ImageSource [DllImport("gdi32.dll", ...
- gcc编译器参数使用及解决
gcc -c CStringAndPointer.c -o CStringAndPointer.o 执行时出现问题: ./CStringAndPointer.o bash: ./CStringAndP ...
- 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)
命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...
- Linux下用户及用户组的管理
一.用户账号管理 1. 添加新用户账号 命令格式: useradd 选项 用户名 选项含义如下: -c comment 指定一段注释性描述. -d 目录 指定用户主目录,如果此目录不存在,则同时使用- ...