摘要:前提前端工程化是如今前端团队规范化管理项目和代码的概念,而前端工程化中往往是离不开前端自动化或打包工具这两种工具。参数介绍可以理解成一种类似于正则表达式的匹配模式,其值可以为匹配形式,文件路径,或者文件路径数组。
前提:前端工程化是如今前端团队规范化管理项目和代码的概念,而前端工程化中往往是离不开前端自动化或打包工具这两种工具。本文将详细介绍其中一种常用的前端自动化工具---gulp.js
- 入门:
安装方式:
全局安装: npm install --g gulp 局部(项目安装): npm install --save-dev gulp
gulp配置文件:
在项目根目录下创建一个gulpfile.js文件,其中default任务为主任务,其他为功能任务;
语法:
var gulp = require("gulp"); gulp.task("default",function(){...});
运行方式:
在命令行中直接输入gulp运行,或者在webstorm中在对应的gulpfile.js点中,然后右键,选择show gulp task方式就能运行;
- gulp的API:
一)gulp.src方法:
定义:该方法会匹配对应的文件,并以虚拟文件流(包含路径,文件名,内容)的形式返回;
语法:gulp.src(globs [,option])
特点:因为返回的文件流是类似于Readable Streams的形式,所以可以利用pipe管道的方式传输,处理文件流。
参数介绍:
a)globs:可以理解成一种类似于正则表达式的匹配模式,其值可以为匹配形式,文件路径,或者文件路径数组。
*:匹配任何字符串但不识别路径分隔符(‘/’)
eg: gulp.src("./build/*.js") 匹配build文件中所有js文件
**:匹配任何字符串包括‘/’
eg:gulp.src("**.js") 匹配任何路径下的js文件
[...] : 枚举
eg: gulp.src("[abc].js") 匹配a.js或者b.js或者c.js
[!...] : 枚举中括号中以外的一切字符串
eg:gulp.src("[!abc].js") 匹配d.js等等js文件
? : 职匹配一个字符串
eg:gulp.src("?.js") 匹配a.js等等js文件
b)option:里面有buffer,read,base配置项,其中base项是关于文件流保存的路径相关(具体放在dest方式中阐述)
二)gulp.dest方法:
定义:将文件流写入到指定的路径文件中,并继续输出该文件流;
语法:gulp.dest(path [,option])
注意事项:
a)文件流写入的文件名只能由流入的文件流定义;
b)path是路径,不能是文件名;
c)src中base项默认是匹配符之前的字符串路径,但也可以人为设置,例子阐述:
gulp.src("a/b/*/[ab].js") .pipe(gulp.dest("./build")) 解释:默认base为a/b,塞进文件流的文件名为*/[ab].js,所以新建的文件的路径为./build/*/[ab].js
gulp.src("a/b/*/c/d.js",{base:"a"}) .pipe(gulp.dest("./build")) 解释:base现是a,塞进文件流的文件名为b/*/c/d.js,所以新建的文件路径为./build/b/*/c/d.js
d)dest方法输出的文件流也可以被pipe传输;
三)gulp.task方法:
定义: 在gulp中定义一个任务,其中主任务为default;
语法: gulp.task(name [,deps] ,fn)
参数:
name是任务名; deps是依赖的任务数组,是在当前任务之前执行的; fn:当前任务内容;
情景:
a) gulp.task("default",function(){...}):最简单模式;
b)gulp.task("default",["A1","A2"]):default是由A1,A2两个任务组成的;
c)gulp.task("default", ["A1","A2"],function(){...}):先执行完A1,A2,再执行default任务;
question: 若任务列表A1,A2中,A1存在异步操作,则执行A2时,A1还很可能未执行完;
resolve:
A) fn任务函数可以引进一个回调函数参数,该参数可以告诉外界该任务是否执行完;
eg: gulp.task("A1",function(cb){ setTime(function(){ console.log(1); cb(); },2000); }) gulp.task("A2",function(){console.log(2);}) gulp.task("default",["A1","A2"],function(){ console.log(3) }) 输出结果为:2 1 3
B)任务函数返回一个流对象,适用于gulp.src方法;
gulp.task("A",function(){ return gulp.src("./a.js") .pipe(插件) }) gulp.task("deafult",["A"],function(){...})
C)返回一个Promise对象;
gulp.task("A",function(){ return new Promise( (res,rej) => { }) }) gulp.task("default",["A"]);
四)gulp.watch方法:
定义:该方法是用来监听文件的变化;
语法一:gulp.watch(glob [,opts] , tasks)
语法二:gulp.watch(glob [,opts] , function(event){...})
event是一个事件对象;
event.type为added(添加类型);changed(改变类型);deleted(删除类型)
event.path:变化的文件路径;
- 常用gulp插件:
gulp有很多插件,而本文列举出一些常用的插件
gulp-uglify插件
用途:用来压缩js文件
用法:
var uglify = require("gulp-uglify"); gulp.task("uglifyJS",function(cb){ gulp.src("./demo/*.js") .pipe(uglify()) .pipe(gulp.dest("build")); cb(); });
gulp-minify-css插件
用途:用来压缩css文件
用法:
var minifyCss = require("gulp-minify-css"); gulp.task("minifyCss",function(cb){ gulp.src("./demo/*.css") .pipe(minifyCss()) .pipe(gulp.dest("./build")); cb(); });
gulp-minify-html插件
用途:合并html文件
用法:
var miniHtml = require("gulp-minify-html"); gulp.task("miniHtml",function(cb){ gulp.src("./src/*.html") .pipe(miniHtml()) .pipe(gulp.dest("./build")); });
gulp-connect插件
用途:自动刷新页面
用法:
var connect = require("gulp-connect"); gulp.task("connect",function(){ connect.server({ root:"src", livereload:true, }) }); gulp.task("watchHtml",function(){ gulp.watch("./src/*.html",function(){ gulp.src("./src/*.html") .pipe(connect.reload()); }) });
gulp-jshint插件
用途:用来检查js语法
用法:
var jshint = require("gulp-jshint"); gulp.task("checkJs",()=>{ gulp.src("./src/*.js") .pipe(jshint()) .pipe(jshint.reporter()) });
gulp-concat插件
用途:合并多个js或者css文件
用法:
var concat = require("gulp-concat"); gulp.task("concat",()=>{ gulp.src("./*/*.js") .pipe(concat("all.js")) .pipe(gulp.dest("./build")); });
gulp-rename:
定义;将文件改名;
语法:
a)rename(filename):将文件直接改为指定文件名;
b)rename({dirname:"A" ,basename:"B" ,prefix:"C-",suffix:"-D", extname:".txt"}):将文件名改为A/C-B-D.txt;
C)rename(function(path){}):path为一个对象,包含B)中所有属性;
var rename =require("gulp-rename"); gulp.task("rename",()=>{ gulp.src("./demo/*.css") .pipe(rename({ suffix:".min", extname:".less" })) .pipe(gulp.dest("./build")); })
参考文档:
gulp文档
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89250.html
摘要:自动化打包上文章概述本文分为上下两篇,上篇主要介绍一些常用的插件也是此次打包主要用的插件,而下篇主要以一个项目为例,从本地出合适的版本,压缩合并到最后打成包,发送至指定目录,做一个全面的演示。 gulp自动化打包(上) 文章概述 本文分为上下两篇,上篇主要介绍一些常用的gulp插件(也是此次打包主要用的gulp插件),而下篇主要以一个demo项目为例,从本地checkout出合适的g...
摘要:核心概念流流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。类型,设置输出路径以某个路径的某个组成部分为基础向后拼接。 一、gulp简介 1.gulp是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用它,不仅可以很愉快的编写代码,而且大大提高我们的工...
摘要:核心概念流流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。类型,设置输出路径以某个路径的某个组成部分为基础向后拼接。 一、gulp简介 1.gulp是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用它,不仅可以很愉快的编写代码,而且大大提高我们的工...
摘要:核心概念流流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。类型,设置输出路径以某个路径的某个组成部分为基础向后拼接。 一、gulp简介 1.gulp是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用它,不仅可以很愉快的编写代码,而且大大提高我们的工...
摘要:介绍说明的包管理器,用于插件管理包括安装卸载管理依赖等使用安装插件命令提示符执行插件名称。总结安装新建文件全局和本地安装安装插件新建文件通过命令提示符运行任务。 showImg(https://segmentfault.com/img/remote/1460000010873466); 前言 众所周知目前比较火的工具就是gulp和webpack,但webpack和gulp却有所不同,本...
阅读 1653·2019-08-30 13:04
阅读 2204·2019-08-30 12:59
阅读 1763·2019-08-29 18:34
阅读 1857·2019-08-29 17:31
阅读 1254·2019-08-29 15:42
阅读 3529·2019-08-29 15:37
阅读 2856·2019-08-29 13:45
阅读 2770·2019-08-26 13:57