zoukankan      html  css  js  c++  java
  • 前端构建神器之 gulp

     

     由于受台风“灿鸿”影响,这个周末未能出去徒步,为了不荒废这大好的时光,故总结一下前段时间学习的gulp。

      gulp 是现在比较流行的前端构建工具,它比较显著的特点就是配置简单易学,并且gulp最大优势还在于它是利用流(Streams)的方式进行文件的处理,通过管道(pipe)将多个任务(task)及操作链接起来。因此流程更明确清晰。构建的速度上也比grunt(另一款前端构建工具)快。(如果项目很小,速度差距则不是那么明显)

    gulp安装

    1、首先确保你的运行环境已经安装了nodejs 环境。然后打开终端运行:

      npm install gulp -g

    2、全局安装成功后还需要在你构建的项目中单独安装一下。打开终端进入项目目录运行: 

      npm install gulp --save-dev

      其中--save-dev是可选的,如果加上则代表你需要将gulp写入到项目package.json文件的依赖中,否则不写入。

    3、接下来在项目根目录下创建gulpfile.js文件(必须是这个名字)

    1 var gulp = require('gulp');     //- 通过 require()导入gulp
    2 
    3 gulp.task('default', function() {
    4     console.log('hello world');
    5 });

    4、最后在终端运行gulp

      点击回车后你会发现控制台打印出了‘hello world’,这说明gulp引入成功。

    gulp API 学习 

      学习技术当然少不了先了解技术的API文档了,所以我们接下来就学习一个gulp有那么方法。其实使用gulp只需要我们了解4个方法即可。其分别为gulp.task(),gulp.src(),gulp.dest(),gulp.watch();

    gulp.task(name[,deps],fn)


      gulp.task()是用来定义任务;

      name:定义任务名称

      deps :可选参数,当前任务需要依赖的其他任务,为一个数组。如果定义了此参数,那么此任务将会在其他依赖任务都执行完毕后执行。

      fn     :定义任务函数,即此任务需要执行的代码。

    定义完成以后我们可以在命令行中输入:gulp <--taskname--> 执行此任务。 

    例如我们在安装步骤3中定义的一个task,其中default为任务名称,后面的function为任务函数。在命令行中输入:gulp default 

    注意:default 是gulp的默认任务,所以default可以省略不写。

    gulp.src(globs[,options])


      gulp.src()是获取操作文件流(Streams)。但是需要注意的是这个流并不是原始文件流,而是一个虚拟文件对象流,其中存储原始文件路径、文件名称、内容等。此方法返回一个 Streams。

      globs    :文件匹配模式(有点类似于正则表达式)即需要读取文件的url,其作用是匹配文件路径或者文件名;如果有多个匹配模式时,该参数可以为一个数组。

      options :可选参数

    举个简单栗子:

    1 var gulp=require('gulp'); 
    2 
    3 //- 定义任务getFiles 
    4 gulp.task('getFiles',function(){
    5     gulp.src(['app/index.html','app/js/*.js']); //- 获取app文件夹下的index.html以及所有app/js下的所有.js文件 
    6 });

    关于参数globs,我这里简单的说一下常用的几种:

    • + *       :匹配路径中的0个或多个字符,但不匹配路径分隔符及'/',除非路径分隔符出现在末尾
    • + **     :匹配路径中的0个或多个目录及其子目录
    • + ?    :匹配路径中的一个字符,但是不匹配路径分隔符
    • +[...] :匹配方括号中出现的字符中的任意一个,当方括号中第一个字符为^或!时,则表示不匹配方括号中出现的其他字符中的任意一个,类似js正则表达式中的用法
    • !(pattern|pattern):匹配任何与括号中给定的任一模式都不匹配的
    • + ?(pattern|pattern)匹配括号中给定的任一模式0次或1次,类似于js正则表达式(pattern|pattern)?
    • + +(pattern|pattern)匹配括号中给定的任一模式至少1次,类似于js正则表达式(pattern|pattern)+
    • + *(pattern|pattern)匹配括号中给定的任一模式0次或多次,类似于js正则表达式(pattern|pattern)*
    • + @(pattern|pattern)匹配括号中给定的任一模式1次,类似于js正则表达式(pattern|pattern)

    文件匹配栗子如下:
      + *  能匹配 a.js、b/、c,但不能匹配a/b.js
      + *.* 能匹配 a.js,b.css,c.html,但不能匹配a/b.js
      + */*/*.html 能匹配 a/b/c.html,不能匹配a/b.htmla/b/c/d.html
      + **/*.js 能匹配 a.js,a/b.js,a/b/c.js,a/b/c/a.js 
      + a/**b/c能匹配 a/b/c,a/ab/c,但不能匹配a/c/b/c
      + ?.js能匹配 a.js,a1.js,b2.js
      + a??能匹配 a.cc,acc,但不能匹配acc/
      + [abc].js只能匹配 a.js,b.js,c.js,不会匹配ab.js,abc.js
      + [^ab].js能匹配 d.js,e.js等,不能匹配a.js,b.js

    globs还可以接受数组,举栗如下:

      ['app/*.html','!app/a.html']:匹配app路径下所有html,不含app子文件夹中的,但是排除app/a.html。

      ['app/*.html','!app/a*.html']:匹配app路径下所有html,不含app子文件夹中的,但是排除app下以a开头的html。

    globs还有特别指出就是它支持以{}为定界符的写法。举栗如下:

      a{b,c}d :展开结果是abc、acd

      a{b,}c   :展开结果是ac、abc

      a{0..3}c :展开结果是a0c、a1c、a2c、a3c

    gulp.dest(path[,options])


      gulp.dest()方法是生成文件

      path     :生成存储路径;这个路径只能指定生成文件的目录,但不能指定文件名。

      options :可选参数

    这个方法需要结合上面介绍的gulp.src()一起使用,简单的流程一般是:

      (1)、通过gulp.src()获取需要处理的文件流,通过管道方法pipe()导入到gulp插件中;

      (2)、插件处理结束后在通过pipe()方法导入到gulp.dest();

      (3)、gulp.dest()将文件流写入文件。

    举个栗子:

    1 var gulp=require('gulp');
    2 //- copy 文件拷贝
    3 gulp.task('copy', function () {
    4     gulp.src('app/**/*') 
    5         .pipe(gulp.dest('dist/'));//- 注意此处只是指定生成文件的目录而不是指定生成文件的名称
    6 });

     gulp.watch(glob[,options],tasks)

      gulp.watch()方法是监听文件变化

      glob    : 文件匹配模式。同gulp.src()中的globs相同

      options : 可选参数

      tasks    : 文件变化后需要执行的任务,是一个数组。

    举栗如下:

    1 var gulp=require('gulp');
    2 gulp.task('test', function () {
    3    console.log('文件有变化!!!'); 
    4 });
    5 gulp.watch('app/index.html',['test']);

    gulp.watch()还有另外一种用法即:

    gulp.watch(glob[,options,callback]);

    此方法可以监听到文件发生了什么变化。举栗如下:

    1 var gulp=require('gulp');
    2 gulp.watch('app/index.html', function (event) {
    3     var file = {
    4         type: event.type, //- 变化类型   added-添加   deleted-删除   changed-修改  
    5         path: event.path  //- 变化文件路径
    6     };
    7     console.log('文件发生改变',file);
    8 });

    小结:

    首先我们了解了gulp的安装;

      需要安装nodejs环境,全局安装使用指令:npm install gulp -g

      项目中安装gulp使用指令:npm install gulp --save-dev

      然后在项目根目录下创建gulpfile.js

    其次学习gulp常用的四个方法,分别是:

      声明定义gulp任务的gulp.task();

      获取文件流的gulp.src();

      生成文件的gulp.dest();

      监听文件变化的gulp.watch();

  • 相关阅读:
    μTorrent for Windows
    坚决抵制Rarbg的恶意修改版
    Check YouTube Video Restrictions Online
    Questions about "Computer Systems: A Programmer's Perspective"
    los diccionarios que te acercan al mundo
    sqlserver 备份数据库 按时间命名备份文件
    Linux中的硬链接和软链接的概念、区别及用法
    高恪固件端口映射怎么配置
    C++中的DLL,Delphi调用需要注意之一
    Delphi中主线程与子线程调用同一方法同步问题
  • 原文地址:https://www.cnblogs.com/thenear/p/4641402.html
Copyright © 2011-2022 走看看