gulp的使用 文档
#gulp ##1 什么是gulp、为什么使用gulp Gulp是一个**构建系统**,它能通过自动执行常见任务,比如编译预处理CSS,压缩JavaScript,来改进网站开发的过程。 将less文件编译到css文件,讲coffee script、Typescript编译到JavaScript,将ES6的代码编译到ES5的代码,将css和JavaScript压缩混淆合并等等……这些都是相当麻烦的事情。一个项目里可能大量地使用了各种新技术,那样整个项目的构建就变成了十分复杂的事情。为了解决这个问题,就产生了自动化构建工具。 gulp是当前比较流行的一种。 曾经流行过的类似框架有grunt,现在比较新的则是webpack。 ##2 参考文档 官方网站:[http://gulpjs.com](http://gulpjs.com) gulp插件地址:[http://gulpjs.com/plugins](http://gulpjs.com/plugins) 中文文档:[http://www.gulpjs.com.cn/](http://www.gulpjs.com.cn/) 中文教程1:[http://www.ydcss.com/archives/18](http://www.ydcss.com/archives/18) 中文教程2:[https://wizardforcel.gitbooks.io/gulp-doc/content/index.html](https://wizardforcel.gitbooks.io/gulp-doc/content/index.html) ##3 gulp的安装 1. 首先,需要nodejs环境。
2. 在命令行中执行`npm install gulp -g`全局安装gulp。
3. 在需要使用gulp的项目文件夹中用命令行执行`npm install gulp --save-dev`把gulp安装到本地的开发依赖目录下。因为gulp只是开发过程中需要用到的包,在真正上线的项目中不需要包含gulp。 ##4 gulp的简单使用 gulp使用了**管道**的思想。 所谓的管道,指的就是把持续想象成一个一个的小管子,每个管子都能对流过自身的数据做一些处理,然后把这些处理过的数据交给下一根管子。 不同的管子拼接到一起,就可以达到“初始数据在经过一系列处理之后变成了最终想要的处理过的数据。” ###4.1 来看一个简单的例子。 1. 首先,在目录下打开命令行,执行: `npm install gulp -g` `npm install gulp --save-dev` `npm install –save-dev gulp-uglify` 2. 然后,创建js/app.js文件,输入一些简单的内容。 function logHello(name) {
console.log('hello ' + name);
} 3. 然后,创建一个名为`gulpfile.js`的文件,并输入以下内容: var gulp = require('gulp'),
uglify = require('gulp-uglify'); gulp.task('default', function () {
gulp.src('js/app.js')
.pipe(uglify())
.pipe(gulp.dest('build'))
}); 4.在命令行执行gulp。 * 然后会看到新增了一个`/build`目录和`/build/app.js`文件,内容如下: function logHello(l){console.log("hello "+l)} ###4.2 在这个例子中: 1. 安装gulp到全局,并在本地开发目录下安装gulp,并安装了一个gulp插件“gulp-uglify”。 gulp插件可以简单理解为:**就是中间的那些用于对流过的数据进行处理的管子。** 1. 准备好即将被处理的源文件。
2. 创建gulpfile.js文件。gulpfile.js文件指导了gulp应该有怎样的行为。
1. gulpfile.js的语法类似于node,所以要先引入gulp的模块。
2. gulp.task用于创建一个gulp任务。gulp的行为是由一个到多个gulp任务组成的。
1. gulp任务创建的方式是`gulp.task(taskName,callback)`.
1. taskName是任务的名字,字符串。
2. callback是任务执行时调用的回调函数。
1. gulp如果没指定的话,会执行名为default的任务。
2. `gulp.src`用于载入源文件。对于管道系统来说,src就是“水源”。这个函数返回来的对象就是管道对象,可以对他使用pipe函数,进行管道处理。
3. uglify是我们`的gulp-uglif`y插件。`.pipe(uglify())`这行代码的意思是:在数据“流经”这一根管道时,使用uglify来对数据记性处理。
4. `gulp.dest('build')`是“数据流向了哪里”,参数是“最后把文件放到哪个文件夹下”。 ###4.3 globs语法 在src和dist里面,用于描述文件路径的字符串可以使用**路径模式匹配**:glob或者glob数组。以完成一次性匹配多个文件的功能。 示例如下: * `js/app.js` 精确匹配文件
* `js/*.js` 仅匹配js目录下的所有后缀为.js的文件
* `js/**/*.js` 匹配js目录及其子目录下所有后缀为.js的文件
* `!js/app.js` 从匹配结果中排除js/app.js,这种方法在你想要匹配除了特殊文件之外的所有文件时非常管用
* `*.+(js|css)` 匹配根目录下所有后缀为.js或者.css的文件 配合使用的简单举例: `gulp.src(['js/**/*.js', '!js/**/*.min.js'])` 匹配js文件夹及其子目录下的.js文件,但其中不包括.min.js文件。 var gulp = require('gulp'),
uglify = require('gulp-uglify'); gulp.task('default', function () {
gulp.src(['js/**/*.js','!js/**/*.min.js'])
.pipe(uglify())
.pipe(gulp.dest('build'))
}); ##5 Gulp API介绍 ###5.1 gulp.task #### 5.1.1 创建一个gulp任务。 `guilp.task(name[,deps],fn)` 其中: * name:任务名
* deps:在该任务执行之前要执行的其他任务,可选
* fn:任务本体,回调函数 #### 5.1.2 顺序执行任务 普通的任务都已经试着写过了。现在来研究任务顺序执行的问题。 var gulp = require('gulp'),
uglify = require('gulp-uglify'); gulp.task('default', ['before', function () {
gulp.src(['js/**/*.js', '!js/**/*.min.js'])
.pipe(uglify())
.pipe(gulp.dest('build'))
}); gulp.task('before',function () {
console.log('before running');
}) 这样做的话,before就会优先于default来执行。 #### 5.1.3 顺序执行异步任务 有时会有这种需求:当一个异步的任务执行完毕之后,再去执行下一个任务。 解决方案有两种: 1. 使用gulp提供的回调函数 gulp.task('timeout', function (cb) {
console.log('timeout waiting 5s');
setTimeout(function () {
cb();
}, 5000)
})
2. 返回流对象 gulp.task('before', function () {
return gulp.src(['js/**/*.js', '!js/**/*.min.js'])
.pipe(uglify())
}) ###5.2 gulp.src 用于从数据源创建一个gulp流。 ####5.2.1 用法: `gulp.src(globs[, options])` 其中`globs`就是我们的文件名或者文件匹配字符串。 options是选项对象,通常只需要注意一个选项:`options.base` 如下例: gulp.src('client/js/**/*.js') // 匹配 'client/js/somedir/somefile.js' 并且将 `base` 解析为 `client/js/`
.pipe(minify())
.pipe(gulp.dest('build')); // 写入 'build/somedir/somefile.js' gulp.src('client/js/**/*.js', { base: 'client' })
.pipe(minify())
.pipe(gulp.dest('build')); // 写入 'build/js/somedir/somefile.js' ###5.3 gulp.dest 用于把gulp流输出到制定的路径。 ####5.3.1 用法: `.pipe(gulp.dest(path)` path就是指输出的路径 ###5.4 gulp.watch `gulp.watch`用于监控文件变化,当文件内容有变化时,就执行指定的任务。 ####5.4.1 用法: gulp.task('watch', function () {
var watcher = gulp.watch('src/*.*', ['default']);
}); 第一个参数是路径,第二个参数是要执行的任务。 其中,watcher对象可以绑定一些事件,比如: gulp.task('watch', function () {
var watcher = gulp.watch('js/*.*', ['default']);
watcher.on('change',function (d) {
console.log('change',d)
})
}); 其他事件有: * end 在watcher结束时触发(这意味着,在文件改变的时候,任务或者回调不会执行)
* error 在出现error时触发
* ready 在文件被找到并正被监听时触发
* nomatch 在glob没有匹配到任何文件时触发 watcher上还有一些可以调用的方法: * watcher.end() 停止watcher(以便停止执行后面的任务或者回调函数)
* watcher.files() 返回watcher监听的文件列表
* watcher.add(glob) 将与指定glob相匹配的文件添加到watcher(也接受可选的回调当第二个参数)
* watcher.remove(filepath) 从watcher中移除个别文件 ####5.4.2 细节 除了执行任务外,watch还可以在数据变更时执行回调函数。 ##6 Gulp常用插件 [https://markgoodyear.com/2014/01/getting-started-with-gulp/]() ###6.1 del 用于删除文件或者文件夹 `npm install del --save-dev` var gulp = require('gulp'),
uglify = require('gulp-uglify'),
del = require('del'); gulp.task('default', function () {
del('build');
}); ###6.2 gulp-concat 用于把多个文件合并起来(js和css都可以) `npm install gulp-concat --save-dev` gulp.task('default', function () {
gulp.src('js/**/*.js')
.pipe(concat('all.js'))
.pipe(gulp.dest('dist'))
}); ###6.3 gulp-rename 重命名文件 `npm install gulp-rename --save-dev` gulp.task('default', function () {
gulp.src('js/**/*.js')
.pipe(rename({
prefix:'demo-',
suffix:'-min'
}))
.pipe(gulp.dest('dist'))
});
###6.4 gulp-uglify 压缩JavaScript文件 `npm install gulp-uglify --save-dev` ###6.5 gulp-cssnano 压缩css文件 `npm install gulp-cssnano --save-dev` gulp.task('default', function () {
gulp.src('css/**/*.css')
.pipe(cssnano())
.pipe(gulp.dest('dist'))
}); ###6.6 gulp-minify-html `npm install gulp-minify-html --save-dev` gulp.task('default', function () {
gulp.src('page/**/*.html')
.pipe(htmlMinify())
.pipe(gulp.dest('dist'))
});
gulp的使用 文档的更多相关文章
- 将markdown文档使用gulp转换为HTML【附带两套css样式】
将markdown文档使用gulp转换为HTML[附带两套css样式] 今天遇到一个需求,即将Markdown文档转为为HTML在网页展示,身为一名程序员,能用代码解决的问题,手动打一遍无疑是可耻的. ...
- gulpfile.js文档
gulp watch 实现监听不仅需要package.json文档,还需要gulpfile.js文档.否则无法实现. 1.gulp的安装 1.1 首先必须先安装node.js.这个可以参考之前的博客& ...
- 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览
### 利用Gulp实现JSDoc 3的文档编写过程中的实时解析和效果预览 http://segmentfault.com/a/1190000002583569
- gulp分享文档
Grunt--I/O操作: 读取A → A.a() → 写出A → 读取A → A.b() → 写出A; gulp--数据流:读取A → A.a() → A.b() → 写出A. Part① 构建gu ...
- 使用jsdoc-toolkit实现JS API文档自动化
在前面的博文中探讨自动化工程问题时,写过基于NodeJS的,使用gulp.grunt的jsdoc插件实现文档自动化.本文探讨基于java环境的自动化实现. 一.Java安装与环境配置 关于Java的安 ...
- 如何快速实现 markdown 转 HTML 文档?
我想要在 Github 上开一个主题博客,我希望通过 Markdown 语法写作,然后生成 HTML 并附带自定义样式显示在网页上. 我找到了 gulp-markdown 这个库,看起来符合我的需求场 ...
- webpack学习文档
webpack课程 目录 第1章 webpack简介... 1 1.1 webpack是什么?... 1 1.2 官网地址... 2 1.3 为什么使用 webpack?... 3 ...
- 你会用AngularJS,但你会写AngularJS文档么?
你会用AngularJS,但你会写AngularJS文档么? 涉及知识:gulp javascript 我们经常在写代码的时候要求写好注释,方便日后维护.但其实注释还有一个重要的用途:生成API文档. ...
- package.json文档
之前在博客中写过一篇关于 " node.js的安装配置 " 的文章,里面有提到利用 gulp watch 来监听文档的变化.其中需要 package.json 文件才能实现效果,所 ...
随机推荐
- margin赋值为负值的几种效果(负值像素,负值百分数)
1.margin-top为负值像素 margin-top为负值像素,偏移值相对于自身,其后元素受影响,见如下代码: <!DOCTYPE html> <html lang=" ...
- “error: command 'x86_64-linux-gnu-gcc' failed with exit status 1” in virtualenv
Most of the time these are dependency-issues. Following the stack-trace of the gcc compiler one ca ...
- windows 批处理设置环境变量
windows通过批处理设置环境变量 CreateTime--2017年8月4日11:28:11Author:Marydon 参考链接:https://wenku.baidu.com/view/a ...
- Android逆向之旅---带你爆破一款应用的签名验证问题
一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解.非常多应用做了一些防护策略.可是防护策略也是分等级.一般简单的策略就是混淆代码和签名校验.而对于签名校验非常多应用 ...
- Git 清除远端已删除的分支
使用 git branch -a 命令可以查看所有本地分支和远程分支(git branch -r 可以只查看远程分支) 发现很多在远程仓库已经删除的分支在本地依然可以看到. # git branch ...
- JavaScript-event参数传递详解
onmouseover="over(event)" onmouseout="out(event)" onclick="change(event)&qu ...
- HDUOJ-------1753大明A+B(大数之小数加法)
大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- leetcode16 3-Sum
题目链接 给定数组a[](长度不小于3)和一个数字target,要求从a中选取3个数字,让它们的和尽量接近target. 解法:首先对数组a进行排序,其次枚举最外面两层指针,对于第三个指针肯定是从右往 ...
- WordPress网站搬家经验总结
http://cnzhx.net/blog/move-wordpress-site-step-by-step/也许很多人都有跟我类似的经历:因为某种原因需要将自己的WordPress站点从一个空间转移 ...
- 你的Android不好用,都是因为这几点原因
Android早已是全球最大.用户最多的移动操作系统,不过它离全球最好用还差得很远. 大家随手就能举出些曾经历过的糟心体验,如手机卡顿!电量不禁用!广告弹窗老是出现!不过很少有人会追根寻底的去问为何如 ...