gulp安装及使用

cxchanpin cxchanpin     2022-09-07     544

关键词:

測试环境

  • Mac:10.10.4
  • Gulp:3.9.0

时间:2015年08月15日18:07:08

安装Gulp

sudo npm install --global gulp

npm install --save-dev gulp

输入gulp -v,显示版本号说明成功安装

使用Gulp

在项目根文件夹创建gulpfile.js文件

var gulp = require('gulp');//引用gulp

gulp.task('default', function() {//创建一个task任务
  // place code for your default task here
});

在终端进入gulpfils.js所在文件夹.

运行gulp,他会默认运行default,假设没有defaulttask的话,会报错;也能够gulp default

总体文件结构

root
 |----gulpfils.js
 |----app
       |----hello.txt
       |----new
             |----world.txt

src/dest

gulp.src:文件源

gulp.dest:目标文件路径

将文件从文件源传送到目的地,能够说是复制,由于源文件还在。

app文件夹

app
 |----hello.txt 
 |----new
       |----world.txt
gulp.task('default',function(){
  gulp.src('app/hello.txt')
 .pipe(gulp.dest('core'));//终于文件路径`core/hello.txt`
});
gulp.task('default',function(){
  gulp.src('app/hello.txt')
 .pipe(gulp.dest('core/hello.txt'));//终于文件路径`core/hello.txt/hello.txt`
});

处理多个文件

gulp.task('default',function(){
  gulp.src('app/**')
 .pipe(gulp.dest('core'));
});

运行之后,core文件夹

core
 |----hello.txt 
 |----new
       |----world.txt

以下src具体解释引自无双

  • *能匹配 a.js,x.y,abc,abc/,但不能匹配a/b.js
  • *.* 能匹配 a.js,style.css,a.b,x.y
  • */*/*.js 能匹配 a/b/c.js,x/y/z.js,不能匹配a/b.js,a/b/c/d.js
  • ** 能匹配 abc,a/b.js,a/b/c.js,x/y/z,x/y/z/a.b,能用来匹配全部的文件夹和文件
  • **/*.js 能匹配 foo.js,a/foo.js,a/b/foo.js,a/b/c/foo.js
  • a/**/z 能匹配 a/z,a/b/z,a/b/c/z,a/d/g/h/j/k/z
  • a/**b/z 能匹配 a/b/z,a/sb/z,但不能匹配a/x/sb/z,由于仅仅有单**单独出现才干匹配多级文件夹
  • ?.js 能匹配 a.js,b.js,c.js
  • a??

    能匹配 a.b,abc,但不能匹配ab/,由于它不会匹配路径分隔符

  • [xyz].js 仅仅能匹配 x.js,y.js,z.js,不会匹配xy.js,xyz.js等,整个中括号仅仅代表一个字符
  • [^xyz].js 能匹配 a.js,b.js,c.js等,不能匹配x.js,y.js,z.js

当有多种匹配模式时能够使用数组

//使用数组的方式来匹配多种文件
gulp.src(['js/*.js','css/*.css','*.html'])

使用数组的方式另一个优点就是能够非常方便的使用排除模式,在数组中的单个匹配模式前加上!即是排除模式。它会在匹配的结果中排除这个匹配。要注意一点的是不能在数组中的第一个元素中使用排除模式

gulp.src(['*.js','!b*.js']) //匹配全部js文件,但排除掉以b开头的js文件
gulp.src(['!b*.js','*.js']) //不会排除不论什么文件,由于排除模式不能出如今数组的第一个元素中

log输出

  console.log("my log");

exec运行命令行

var exec = require('child_process').exec;
gulp.task('default', function() {
exec('mkdir mygulp');
});

运行gulp,就能够看到当前文件夹下创建了一个mygulp文件。

假设你想要回调。能够这样

exec('rm -R mygulpfile',function (error, stdout, stderr){
      if (error !== null) {
        console.log("error: " + error);
      }else{
        console.log("ok");
      }
  });

运行gulp传入參数\接收參数

 var gulp = require('gulp'),
        argv = require('yargs').argv;
    gulp.task('hello_task',function(){
    if(argv.test) {
      var info = argv.test;

      console.log('收到的參数:'+info);
    } else {
      console.log('输入错误 请输入 gulp hello_task --test hellotest');
    }
    });

注:运行yargs的时候可能会出错,依照终端的提示操作就可以。

watch

官网

监听文件变化

这里监听app/hello.txt为例

gulp.task('watch', function () {
    gulp.watch('app/hello.txt',function(file){
      console.log(file.type); //变化类型 added为新增,deleted为删除。changed为改变
      console.log(file.path); //变化的文件的路径
    });
});

运行gulp watch

hello.txt加入一行hi World

终端输出

[15:43:16] Using gulpfile ~/root/gulpfile.js
[15:43:16] Starting 'watch'...
[15:43:16] Finished 'watch' after 10 ms
changed //改动了文件
~/root/app/hello.txt //文件路径

插件使用

比方说。app文件夹以下,将全部文件中的helloWorld替换为helloChina.

这里使用的是gulp-replace插件,怎么使用,官网有具体文档

安装gulp-replace:运行npm install --save-dev gulp-replace,须要权限的话。在前面加上sudo.

   var gulp = require('gulp'),
       replace = require('gulp-replace');
    gulp.task('replace_code',function(){
      gulp.src('app/**')
      .pipe(replace("helloWorld","helloChina"))
      .pipe(gulp.dest('app'))
    }
);

合并task运行

此时假设有两个task,分别为’task1’、’task2’,运行一个命令。将他俩都运行

gulp.task('task3', ['task1','task2']);

gulp.task('task3', ['task1','task2'],function(){
  //coding
});

在终端输入gulp task3,task1task2都会运行

多个task按顺序运行

參考官网

这里以运行one后才干运行two为例

採用callback

var gulp = require('gulp');

// takes in a callback so the engine knows when it'll be done
  gulp.task('one', function(cb) {
      console.log('開始运行one');
      // 延时
      setTimeout(function(){
          console.log('运行oneOk');
          cb(); 
      }, 2000);

  });

  // identifies a dependent task must be complete before this one begins
  gulp.task('two', ['one'], function() {
      // task 'one' is done now
      console.log('開始运行two');
  });

运行gulp two返回结果

 ➜  Shadowsocks git:(master) ✗ gulp two
  [13:15:05] Using gulpfile ~/Shadowsocks/gulpfile.js
  [13:15:05] Starting 'one'...
  開始运行one
  运行oneOk
  [13:15:07] Finished 'one' after 2 s
  [13:15:07] Starting 'two'...
  開始运行two
  [13:15:07] Finished 'two' after 99 μs
  ➜  Shadowsocks git:(master) ✗   

返回stream

 var gulp = require('gulp');

   gulp.task('one', function(cb) {
     console.log('開始运行one');
     // 处理文件
     var stream = gulp.src('gulp/**')
                 .pipe(gulp.dest('build'));
     console.log('运行oneOk');
     return stream;
   });

   gulp.task('two', ['one'], function() {
       // task 'one' is done now
       console.log('開始运行two');
   });

运行gulp two返回结果

 ➜  Shadowsocks git:(master) ✗ gulp two
   [13:19:27] Using gulpfile ~/Shadowsocks/gulpfile.js
   [13:19:27] Starting 'one'...
   開始运行one
   运行oneOk
   [13:19:44] Finished 'one' after 17 s
   [13:19:44] Starting 'two'...
   開始运行two
   [13:19:44] Finished 'two' after 183 μs
   ➜  Shadowsocks git:(master) ✗ 

返回promise

假设没有q的话,运行sudo npm install q

var gulp = require('gulp');
   var Q = require('q');

   gulp.task('one', function() {
       console.log('開始运行one');
       var deferred = Q.defer();

       // do async stuff
       setTimeout(function() {
          console.log('运行oneOk');
          deferred.resolve();
       }, 2000);

       return deferred.promise;
     });

   // identifies a dependent task must be complete before this one begins
   gulp.task('two', ['one'], function() {
      // task 'one' is done now
      console.log('開始运行two');
   });

运行gulp two返回结果

   ➜  Shadowsocks git:(master) ✗ gulp two
   [13:47:56] Using gulpfile ~/Shadowsocks/gulpfile.js
   [13:47:56] Starting 'one'...
   開始运行one
   运行oneOk
   [13:47:58] Finished 'one' after 2 s
   [13:47:58] Starting 'two'...
   開始运行two
   [13:47:58] Finished 'two' after 67 μs
   ➜  Shadowsocks git:(master) ✗ 

附:假设在上述三种方法中,均加入gulp.task('default', ['one', 'two']);,运行gulp,效果也是一样的.

注意事项

  • gulp-replace替换文本注意点

    将项目project中全部文件中的helloWorld替换成helloChina

gulp.src('app/**')
    .pipe(replace("helloWorld","helloChina"))
    .pipe(gulp.dest('app'))

假设项目中有不能被编辑器编辑的文件,像.jar.png.jpg等,运行上述代码后。整个project会运行不了,所以在替换的时候。须要加入限制

这里以一般的Android项目为例,不可被编辑的文件有.jar.png.jpg

gulp.src(['app/**','!**/*.jar','!**/*.png','!**/*.png'])
    .pipe(replace("helloWorld","helloChina"))
    .pipe(gulp.dest('app'))

Gulp个人理解

gulp能够看做是一个传送带,作用仅仅是将文件从A传送(复制)到B,其它的不做。

假设想要完毕文本替换、压缩等功能的话。在传送带上面安装插件。由插件完毕。

推荐插件

  • run-sequence

    让gulp任务。能够相互独立。解除任务间的依赖,增强task复用

  • browser-sync

    静态文件server,同一时候也支持浏览器自己主动刷新

  • yargs

    用于获取启动參数。针对不同參数。切换任务运行过程时须要

  • del

    删除文件或文件夹

  • gulp-util

    gulp经常使用工具

  • gulp-zip

    用于文件压缩

參考

Gulp官网

插件平台1

插件平台2

glob

使用gulp实现文件压缩及浏览器热加载

一.安装gulp  首先,你要安装过nodejs,如果没有安装过的同学请自行下载。 先再命令行里输入  npminstallgulp-g  下载gulp二.创建gulp项目  创建一个你需要项目文件夹,然后在根目录输入 npminit (npminit... 查看详情

gulp新手使用

Gulp注意:gulp依赖于nodejs,在安装前要确保已经安装node环境,如为安装查看《windows系统下nodejs安装及环境配置》安装node环境。1.全局安装在命令行执行下边命令,进行全局安装:npminstall--globalgulp检测gulp是否安装成功,执行下边... 查看详情

前端构建工具gulpjs的使用介绍及技巧

...gruntjs太难用的话,那就尝试一下gulp吧。本文导航:gulp的安装开始使用gulpgulp的API介绍一些常用的gulp插件1、gulp的安装首 查看详情

前端构建工具gulpjs的使用介绍及技巧

...gruntjs太难用的话,那就尝试一下gulp吧。本文导航:gulp的安装开始使用gulpgulp的API介绍一些常用的gulp插件1、gulp的安装首 查看详情

gulp学习笔记

...lpjs的使用介绍及技巧,这篇文章就挺全面。  1、gulp的安装  gulp是基于nodejs开发的,所以首先确定安装了nodejs。  (1)全局安装gulpnpminstall-ggulp  (2)针对项目局部安装gulpnpminstallgulp  (3)在项目目录下安装gulp依赖包npminsta... 查看详情

gulp入门及简单使用

...nt、Webpack(何其复杂!)。所以我们先来个简单的。 使用首先,使 查看详情

gulp介绍及常用插件使用方法(代码片段)

gulp是前端开发过程中对代码进行自动化构建的利器。它不仅能对资源进行优化,而且在开发过程中能够通过配置自动完成很多重复的任务,让我们可以专注于代码,提高工作效率。一、API介绍gulp常用的API只有四个:gulp.task(),gulp... 查看详情

gulp教程之静态资源压缩(代码片段)

1创建项目安装nodejs/全局安装gulp/本地安装gulp/创建package.json和gulpfile.js文件,项目目录如下:2压缩插件简介gulp-useref合并html里面的js/cssgulp-concat用于合并文件,把也就是多个文件合并到一个文件中,以节省存储空间gulp.spritesmith图... 查看详情

gulp-connect启动本地服务及实现浏览器热加载

1、创建package.json文件npminit2、安装gulp、gulp-connectnpminstall--save-devgulpgulp-connect3、创建gulpfile.js文件并引入gulp、gulp-connectvargulp=require(‘gulp‘);//本地、全局都要安装varconnect=require(‘gulp-connect‘);//创建“ 查看详情

gulp构建前端自动化工作流之:常用插件介绍及使用

...:1.构建项目目录结构(DirectoryStructureBuild)2.插件介绍及使用方法(Tasksanddependencies)3.扩展优化(Extend&OptimizeTask)4.其他插件介绍(Otherplug-ins)5.匹配规则(MatchFiles)6.注意事项(At 查看详情

gulp的使用安装

gulp安装:用cnpm的时候把npm换成cnpm就好了。npminstall-ggulp(全局安装,安装一次就好)npminstall--save-devgulp(安装到项目目录下,在每次的项目下安装)gulp的基本用法:建一个js文件并命名为 gulpfile.js ,把下面的代码粘贴进... 查看详情

论gulp的使用

1、gulp的安装首先确保你已经正确安装了nodejs环境。然后以全局方式安装gulp: npminstall-ggulp全局安装gulp后,还需要在每个要使用gulp的项目中都单独安装一次。把目录切换到你的项目文件夹中,然后在命令行中执行: npmins... 查看详情

gulp的安装与使用

全局安装gulp(基于node):$npminstall--globalgulp 进入项目所在的文件夹,执行npminit,填写相关参数,生成记录配置文件信息的package.json,用于以后项目移植时使用。 进入项目所在的文件夹,作为项目的开发依赖(devDependenci... 查看详情

gulp的使用

1.安装node.js2.全局安装gulp.jsnpminstallgulp-g3.在项目本地根目录再安装(通过黑窗口安装)npminstall--save-devgulp/或者npminstallgulp,项目本地会自动生成package.json配置文件4.在项目根目录创建gulpfile.js文件5,在gulpfile.js中写vargulp=require(‘gulp‘);... 查看详情

gulp安装与使用

...切,只需要一个简单的指令就能全部完成。 二、开始安装 1、全局安装cnpminstallg 查看详情

gulp使用

gulp需要全局安装和当前目录都安装才能使用gulp命令安装gulp插件npminstallgulp-revgulp-rev-replacegulp-userefgulp-filtergulp-uglifygulp-csso--save-devgulp-rev:给每个文件添加版本号,根据文件内容计算hash码,修改文件名,避免客户端缓存问题gulp-re... 查看详情

gulp安装和使用

p.p1{margin:0.0px0.0px0.0px0.0px;line-height:19.0px;font:13.0px"HelveticaNeue"}span.s1{font:14.0px"HelveticaNeue"}1、全局安装gulp:sudonpminstall-ggulp2、代码根目录:npminstall3、gulp开始编译(在项目根目录下创建一个名为gulpfile.js的文 查看详情

vs中使用gulp

...nodejs.cn/下载,本人下载的4.4.4版本,下载完后进行傻瓜式安装,注意安装路径最好不要含有空格或中文2、安装gulp以及需要的插件  1、输入命令进行安装gu 查看详情