gulpjs学习笔记
来源:互联网 发布:淘宝充q币没到账怎么办 编辑:程序博客网 时间:2024/05/23 11:27
1.gulp的安装
1.1. 在gulp安装前,请确保正确安装了node.js的环境。然后再全局安装gulp
npm install -g gulp
1.2. 完成gulp的全局安装之后,还需要在每个使用gulp的项目中单独的安装一次,如果需要将gulp添加到package.json文件的依赖中,则需要在后面添加--save-dev
npm install --save-dev gulp
2.gulp的使用
2.1 新建gulpfile.js文件 gulp.js的运行需要一个主文件,主文件的文件名为gulpfile.js(注:文件名不能改变),然后我们就可以在gulpfile.js文件中定义我们的gulp任务了,一个简单的gulp任务如下:
var gulp = require("gulp"); gulp.task("default",funciton(){ console.log("hello gulp!!!"); })
2.2 运行gulp任务 打开命令行,将目录切换到gulpfile.js 所在的目录,在命令行中运行 gulp, gulp的后面也可以跟任务名,如gulp taskName。如果任务名为default,则可以省略,如本例,直接运行gulp即可。
3.gulp的API
gulp的工作流程:gulp是基于Nodejs中的stream(流)工作的,首先获取到需要gulp进行处理的文件流(使用gulp.src()),然后通过stream的pipe()方法导入到需要处理的地方,例如合并文件的插件中, 经过插件处理后的流又可以通过pipe继续导入到其他的插件中,如压缩文件的插件,也可以将流写入到文件中(使用gulp.dest())
3.1 gulp.src()
作用:用来获取流,注意这里的流里面的内容并不是原始的文件流,而是一个虚拟的文件对象流,这个虚拟的文件对象流中储存着原始文件的文件名,路径和内容等信息。 语法:gulp.src(globs[,options]); globs:文件的匹配模式(可以通过一定的规则来匹配文件的路径),可以直接理解为需要进行处理的文件的路径。如果包含多个匹配模式时,该参数可以是一个数组 options:可选参数,通常不需要用到 ? 匹配一个字符,但不匹配/ * 匹配0个或多个字符,但不能匹配/,若/出现在末尾则除外。例:能匹配index.html,src/;但不能匹配src/index.html ** 匹配0个或者多个目录,但需要单独出现,但需要作为单独的一级目录出现,即左右除了/外,不能有其他的字符。例:能匹配index.html,src/index.html,object/src/index.html [] 匹配方括号中出现的任意一个字符,若方括号中的内容以^或!开头,则表示不匹配方括号中出现的任意一个字符。例[abc].js能匹配a.js,b.js,c.js,但不匹配ab.js,abc.js等;[^abc].js匹配除a.js,b.js,c.js外的其他js文件; !(pattern|pattern|pattern) 匹配除括号中任意一种模式以外的其他模式 @(pattern|pattern|pattern) 匹配括号中给定的任意模式一次 ?(pattern|pattern|pattern) 匹配括号中给定的模式0次或1次 *(pattern|pattern|pattern) 匹配括号中给定的模式0次或多次 +(pattern|pattern|pattern) 匹配括号中给定的模式至少一次 a{b,c}d 匹配abc,acd a{b,}c 匹配abc,ac a{0..2}c 匹配a0c,a1c,a2c
3.2 gulp.dest()
作用:用来将文件流写入文件的 语法:gulp.dest(path[,options]) path: 为写入文件的路径; 注:使用gulp.dest()时,传入的路径参数,只能够用来指定要生成的文件的路径,并不能指定文件名。生成的文件的文件名是导入文件的文件名。例如:
gulp.src("a/b.js") .pipe(gulp.dest("c/d.js")) //最终生成的文件的路径为c/d.js/b.js,并不是c/d.js;
可以使用gulp-rename插件来更改文件名。 注:gulp.dest(path)生成的文件路径是path参数的路径再加上gulp.src()中有通配符开始出现的那部分路径;如
gulp.src("src/**/jquery.js") //有通配符开始出现的那部分路径为**/jquery.js .pipe(gulp.dest("dist")); //最后生成的路径dist/**/jquery.js /*若通过gulp.src("src/**/jquery.js")中的匹配模式匹配到的路径为"src/lib/jquery.js",则最后生成的路径为"dist/lib/jquery.js"*/
我们可以通过配置gulp.src()方法中的base参数,来改变gulp.dest()生成的文件路径 但不配置base参数时,base参数默认为通配符开始出现之前的那部分文件路径,如上例中的src 其实,通过gulp.dest(path)生成的文件的路径就是用path替换gulp.src()中的base后,得到的文件路径。
gulp.src("src/lib/**/jquery.js",{base:"src"}) .pipe(gulp.dest("dist")); /*若通过gulp.src("src/lib/**/jquery.js")中的匹配模式匹配到的路径为"src/lib/script/jquery.js",则最后生成的路径为"dist/lib/script/jquery.js",而不再是dist/script/jquery.js*/
通过gulp.dest()将文件流写入文件后,文件流仍然可以继续使用
3.3 gulp.task()
作用:用来定义一个gulp的任务 语法:gulp(name[,deps],fn) name: 任务名 若为"default"时,则可以直接通过gulp命令执行,不需要gulp taskName deps: 可选。定义当前任务需要依赖的其他任务,为一个数组。若定义这个参数,这需要等待依赖任务都执行完毕后,当前任务才会执行 fn: 可选,即当前任务需要执行的函数。 gulp.task('default',['task1','task2','task3']); //运行gulp命令,就相当于执行了task1,task2,task3这三个任务 //如果task1,task2,task3任务之间没有依赖关系,则会按照书写的顺序来执行。如果存在依赖关系,则会按照依赖关系来先后执行,但是如果依赖的任务中包含有异步操作,并不会等待异步操作执行完成后才执行当前任务,如
gulp.task('one',function(){ //one是一个异步执行的任务 setTimeout(function(){ console.log('one is done') },5000); }); //two任务虽然依赖于one任务,但并不会等到one任务中的异步操作完成后再执行 gulp.task('two',['one'],function(){ console.log('two is done'); });
若需要等待异步任务中的异步操作完成后再执行后续的任务,有如下三种方法实现: 1.可在异步操作完成后执行一个回调函数来通知gulp这个异步任务已经完成,这个回调函数就是任务函数的第一个参数。 gulp.task('one',function(cb){ //cb为任务函数提供的回调,用来通知任务已经完成
//one是一个异步执行的任务 setTimeout(function(){ console.log('one is done'); cb(); //执行回调,表示这个异步任务已经完成 },1000); }); //这时two任务会在one任务中的异步操作完成后再执行 gulp.task('two',['one'],function(){ console.log('two is done'); });
2. 定义任务时返回一个流对象。适用于任务就是操作gulp.src获取到的流的情况。
gulp.task('one',function(cb){ var stream = gulp.src('client/**/*.js') .pipe(dosomething()) //dosomething()中有某些异步操作 .pipe(gulp.dest('build')); return stream; }); gulp.task('two',['one'],function(){ console.log('two is done'); });
3. 返回一个promise对象,例如
var Q = require('q'); //一个著名的异步处理的库 https://github.com/kriskowal/q gulp.task('one',function(cb){ var deferred = Q.defer(); // 做一些异步操作 setTimeout(function() { deferred.resolve(); }, 5000); return deferred.promise; }); gulp.task('two',['one'],function(){ console.log('two is done'); });
3.4 gulp.watch()
作用:用来监视文件的变化;语法:gulp.watch(glob[, opts], tasks);glob 需要监控的文件匹配模式,规则同gulp.src()中的globtasks 文件变化后执行的任务,为一个数组;例:gulp.watch("src/**",[task1,task2])//当文件发生变化后,执行task1,task2任务也可以传入一个回调函数。每当监视的文件发生变化时,就会调用这个函数,并且会给它传入一个对象,该对象包含了文件变化的一些信息,type属性为变化的类型,可以是added,changed,deleted;path属性为发生变化的文件的路径
gulp.watch('js/**/*.js', function(event){ /*do something*/ console.log(event.type); //变化类型 added为新增,deleted为删除,changed为改变 console.log(event.path); //变化的文件的路径 });
注:个人gulp学习笔记,参考博客:http://www.cnblogs.com/2050/p/4198792.html
0 0
- gulpjs学习笔记
- 前端构建工具gulpjs
- gulpJs使用总结
- gulpjs安装和用法
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 前端构建工具gulpjs的使用介绍及技巧
- 人民的名义
- 常用的RFID卡 14443A/B, 15693
- PHP的代理模式
- windows下python配置numpy、matplotlib、scipy
- DCT变换-笔记(草稿)
- gulpjs学习笔记
- web.py相关
- xgboost安装 win7 python2.7
- Android学习群群内分享:Android面试中的那些高频知识点解析
- Oracle的PL/SQL块中select * from 查询结果集
- could not get batchedbridge make sure
- H5图片上传预览
- 使用sklearn进行K_Means聚类算法
- android 圆角图片的实现和封装