前端构建之--gulp
gulp相关插件:
1、del / gulp-clean 删除文件,用于清空文件
2、browser-sync 用于自动刷新浏览器
3、gulp-htmlmin 用于压缩html
4、gulp-clean-css / gulp-cssnano 压缩css
gulp-autoprefixer 给css属性自动增加浏览器前缀
5、gulp-uglify 压缩js
6、gulp-replace 替换路径
7、gulp-base64 将小背景图转换为base64的形式,可以自己设置最大多少尺寸转为base64
8、gulp-imagemin 压缩图片大小
9、gulp-eslint/gulp-jshint 检查Js语法错误
10、gulp-sass 编译sass
gulp-less 编译less
11、gulp-ng-constant 为angular生成常数constant
12、gulp-rename 修改文件名称。比如有时需要把app.js改成app.min.js
13、gulp-util gulp-util里有很多方便的函数,最常用的就是log了。
14、gulp-changed 默认情况下,每次运行时候所有的文件都会传递并通过整个管道。通过使用 gulp-changed 可以只让更改过的文件传递过管道。这可以大大加快连续多次的运行。
15、gulp-plumber 作用是一旦pipe中的某一个steam报错了,保证下面的stream还会继续执行。因为pipe默认的onerror函数会把剩下的stream给unpipe掉,这个插件阻止了这种行为。使用场景,例如,代码每次build之前都要跑一遍jshint和jscs来确保所有代码都符合规范,但一旦某些代码不符合规范,整个build流程都会停止,这个时候就需要gulp-plumber出场了。这个插件可以阻止gulp插件发生错误导致进程退出并输出错误日志
16、gulp-filter 把stream里的文件根据一定的规则进行筛选过滤。
17、gulp-if 条件性的添加stream, 如.pipe($.if(flag, action1())),则只会在flag变量为true时才会将action1()添加到stream中去。其实不用这个插件也是可以达到类似的效果,利用gulp-util里的一个函数noop(),也就是no operation,这个函数其实返回一个什么都不干的空stream。利用这个函数可以这样写: .pipe(flag?action1():$.util.noop()),与上面的例子效果一样。
gulp-inject 自动插入静态文件到html
gulp-flatten 去掉文件夹层级,例如gulp.src('**/*.js')匹配了很多文件,包括a/b/c.js, d/e.js, f/g/h/i/j/k.js, l.js这些文件的层级都不一样,一旦将这个文件pipe给$.flatten()则所有的文件夹层级都会去掉,最终文件将是c.js,e.js,k.js,l.js
gulp-load-plugins 这个插件的功能就是帮助require我们在package.json中声明的依赖。只要let $=require('gulp-load-plugins')(),则package.json中声明的gulp-或gulp.开头的插件就会自动被放在变量$下面。例如$.util等于require('gulp-util'),而有两个连字符的插件则会自动命名为驼峰式格式,如$.taskListing则等于require('gulp-task-listing')。有了这个插件就不需要一个一个的require了。该插件的一些常用参数配置如下:
lazyload: true 用到这个插件的时候再去require,默认为true,
gulp-rename: 修改文件名称。比如有时需要把app.js改成app.min.js。{'gulp-task-listing': 'list'},如果有些插件名字太长,可以使用该参数重命名。
scope: ['dependencies'],本插件默认会扫描package.json里的所有dependence,可以使用该参数进行限制。
gulp-rev: 把静态文件名改成hash形式
gulp-rev-replace: 配合gulp-rev使用,拿到生成的manifest.json后替换对应的文件名称。
gulp-useref: 对html页面中的js,css引用进行合并,压缩等操作很简单。
gulp-sourcemaps 生成sourcemaps信息文件,因为文件压缩后不利于查看与调试,但是有了sourcemap,出错的时候,出错工具将直接显示原始代码,而不是转换后的代码
gulp-concat:合并文件
gulp-babel es6转es5
gulp-coffee: 编译CoffeeScript
gulp-env 分环境配置
gulp-mocha 单元测试
gulp-header 用来在压缩后的js,css文件中添加头部注释,可以包含任意想要的信息,通常是作者、描述、版本号、license等
run-sequence gulp里的任务都是异步并发执行的,有时需要一连串的task按顺序执行,这时就需要run-sequence登场了。
它的调用很简单:runSequence('task1', 'task2', ['task3', 'task4'], 'task5'), 这里的task都是gulp定义好的task名称,task1完成后才会执行task2,以此类推。注意到task3和task4被放到方括号中,这表明task3和task4可以并发执行,但两个都执行完后才会执行task5。每一个task都会返回一个stream,即return gulp.src().pipe().pipe(),要么支持回调函数,即gulp.task('task1', function(done) {action1(done);}),满足了这两点才能保证正常的执行顺序,因为这是gulp对异步task的基本要求。
yargs: 严格的说,yargs不是专门用于gulp的,它是Node中处理命令行参数的通用解决方案,只要一句代码var args = require('yargs').argv;
就可以让命令行的参数都放在变量args上,非常方便。它处理的参数类型也是多种多样的:
单字符的简单传参,如传入-m=5 或 -m 5, 则可以得到args.m=5;
多字符传参(必须使用双连字符),如传入--test=5 或 --test 5, 则可以得到args.test =5。
不带值的参数,如传入--mock, 则会被认为是布尔类型的参数,可得到args.mock=true。
除此之外,还支持很多其他类型的传参方式,具体参考文档https://www.npmjs.com/package/yargs
gulp-angular-templatecache 将angularjs html模板压缩并缓存
gulp-angular-filesort 根据模块的定义和引用顺序排序angularjs文件Automatically sort AngularJS app files depending on module definitions and usage
gulp-natural-sort 根据路径名排序Sort stream by path name using a natural sort
gulp-ng-annotate 压缩js会破坏AngularJs文件所需要的依赖注入,以至于无法工作,因此压缩前需要将angular.module("MyMod").controller("MyCtrl", function($scope, $timeout) { });手动修改为这种形式angular.module("MyMod").controller("MyCtrl", ["$scope", "$timeout", function($scope, $timeout) { }]);ng-annotate就帮助我们完成这项工作
main-bower-files 通过读取并分析bower.json文件里override属性里main路径下定义的插件及相关依赖,返回一个文件数组。
event-strean
http-proxy-middleware
merge-stream 将多个stream合并成一个返回。一个gulp的task只能返回一个stream,但有这样的一种场景:有两类文件,它们的原始位置和处理后的位置都是不同的,但它们的处理流程相同。由于gulp.src和gulp.dest的参数不同,我们就需要写两个task来分别完成这个任务,一方面略显重复,另一方面逻辑上来讲这两个task本来就是处理相同的事情,这种情况就需要merge-stream了。
sprity:生成雪碧图
gulp-html2md: 把HTML编译为Markdown
gulp-markdown: 可以把Markdown转换成HTML
gulp-markdown-pdf: 把Markdown编译为PDF
前端构建之--gulp的更多相关文章
- 前端构建大法 Gulp 系列 (四):gulp实战
前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...
- 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
- 前端构建大法 Gulp 系列 (二):为什么选择gulp
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
- 前端构建大法 Gulp 系列 (一):为什么需要前端构建
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
- (转载)前端构建工具gulp使用
前端构建工具gulp使用 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中 ...
- (转)前端构建工具gulp入门教程
前端构建工具gulp入门教程 老婆婆 1.8k 2013年12月30日 发布 推荐 10 推荐 收藏 83 收藏,20k 浏览 本文假设你之前没有用过任何任务脚本(task runner)和命令行工具 ...
- 前端构建工具gulp
前端构建工具gulp使用 前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gul ...
- 前端构建大法 Gulp 系列
参考: 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp ...
- 前端构建工具gulp使用
前端自动化流程工具,用来合并文件,压缩等. Gulp官网 http://gulpjs.com/ Gulp中文网 http://www.gulpjs.com.cn/ Gulp中文文档 https://g ...
- 前端构建工具gulp介绍
2016年3月3日 10:46:08 晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...
随机推荐
- 周记7——ios中picker滑动穿透bug
Bug描述:使用mint-ui的picker组件时,datepicker和picker在ios的webview(bug是在Hybrid App发现的)中会出现滑动穿透的现象,导致弹层后面的页面也会滚动 ...
- JAVA泛型——基本使用
Java1.5版本推出了泛型,虽然这层语法糖给开发人员带来了代码复用性方面的提升,但是这不过是编译器所做的一层语法糖,在真正生成的字节码中,这类信息却被擦除了.笔者发现很多几年开发经验的程序员,依然不 ...
- [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)
本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章 创建一个分组报表 1. 建立数据模型 数据模型用于 ...
- C# 核心语法-反射(反射类型、方法、构造函数、属性,实现可配置可扩展,完成数据库访问类反射封装)
反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使 ...
- C# 程序执行时间差
有时需要知道执行一个方法需要多少时间,这时会用到一个时间差TimeSpan DateTime startTime = DateTime.Now;//方法开始时间 //{ // 你需要测试的代码. // ...
- 分布式ID生成器PHP+Swoole实现(下) - 代码实现
上篇文章主要介绍<实现原理>,这篇看主要代码的编写. 实现IDGenerator类 64位ID由以下元素组成:固定位占2位,时间戳占41位,服务实例数字编号占4位,业务编号占10位,自增i ...
- ETL第二篇 调用webservice
ETL第一篇(Kettle Spoon) 初遇 ETL第二篇 调用webservice 前言 这里使用ETL [Java代码] 实现 代码中使用axis调用webservice 在ETL提供了 Pro ...
- web杂记-禁止输入框自动填充文字
1:背景 公司基于业务需求开发了一套纯JS的时间控件,本来用得好好得.后来发现在部分浏览器下使用该时间控件会出现输入框自动填充的部分与控件的展示产生了冲突: 如图: 2:问题分析 因为部分浏览太人性化 ...
- 51nod1538:一道难题(常系数线性递推/Cayley-Hamilton定理)
传送门 Sol 考虑要求的东西的组合意义,问题转化为: 有 \(n\) 种小球,每种的大小为 \(a_i\),求选出大小总和为 \(m\) 的小球排成一排的排列数 有递推 \(f_i=\sum_{j= ...
- JSTL总结摘要
一 概述 1.什么是JSTL? JSP Standard Taglib,一个定义了一系列标签的标签库,以取代在JSP页面中嵌套的java代码,经常与EL结合使用,使页面风格统一,维护方便. JSTL标 ...