自动构建工具Gulp

简介: 摘要:    gulp与grunt一样,都是自动构建工具。和grunt相比它更突出一个流的概念,任务是一个接一个执行的。今天就分享如何用gulp做自动化。 安装:   gulp也是基于node环境,所以安装gulp之前你需要安装node.js。

摘要:

   gulp与grunt一样,都是自动构建工具。和grunt相比它更突出一个流的概念,任务是一个接一个执行的。今天就分享如何用gulp做自动化。

安装:

  gulp也是基于node环境,所以安装gulp之前你需要安装node.js。

   npm install -g gulp

只要在命令窗口中执行上面一行命令就完成安装,这样安装的是全局安装。在项目中一般是通过package.json中的devDependencies属性来安装。如下:

{
    "name": "",
    "version": "0.0.0",
    "description": "",
    "main": "gulpfile.js",
    "dependencies": {},
    "devDependencies": {
        "gulp": "~3.5.6"
    },
    "license": "ISC"
}

 

执行npm install就会将gulp安装到当前项目中。

如何运行:

  安装完gulp之后,需要新建一个gulpfile.js文件,一般是在项目的根目录,与package.json放在一块。那gulpfile.js文件里面到底写什么呢?当然是定义一些任务。如下:

var gulp = require('gulp');

gulp.task('default', function() {
  // 执行任务
});

 

然后在当前目录中通过命令窗口执行gulp,default里面的任务就会被执行。

配置参数:   

gulp.src(globs[, options])

  加载文件,并将文件以流的方式传到插件中,如下:

gulp.src('client/templates/*.jade')
  .pipe(jade())
  .pipe(minify())
  .pipe(gulp.dest('build/minified_templates'));

 

gulp首先会加载client/templates/下的所有jade文件,然后分别传递给jade插件、minify插件,然后输出到build/minified_templates中。

globs

  类型:String,Array

  文件或者是路径,多个文件以数组的形式。

options

  类型:Object

  gulp通过options将配置参数传递给node

options.buffer

  类型:bool

  默认值: false

  是否将文件以流的方式返回,false设置文件内容以流的方式读取,并且不缓存,对于大文件设置缓存将是非常有用的。

options.read

  类型:bool

  默认值:true  

  设置是否读取文件,如果设置false将永远不读取文件

options.base

  类型: String

  设置输出文件的根目录,如下:

gulp.src('client/js/**/*.js') // Matches 'client/js/somedir/somefile.js' and resolves `base` to `client/js/`
  .pipe(minify())
  .pipe(gulp.dest('build'));  // Writes 'build/somedir/somefile.js'

gulp.src('client/js/**/*.js', { base: 'client' })
  .pipe(minify())
  .pipe(gulp.dest('build'));  // Writes 'build/js/somedir/somefile.js'

gulp.dest(path[, options])

  输出文件,可以输出到不同目录下,如果目录不存在就创建,如下:

gulp.src('./client/templates/*.jade')
  .pipe(jade())
  .pipe(gulp.dest('./build/templates'))
  .pipe(minify())
  .pipe(gulp.dest('./build/minified_templates'));

path

  类型: String,Function

  设置输出文件的路径

options.cwd

  类型: String

  默认值: process.cwd()

  输出的文件夹,只有当路径为相对路径时才起作用

options.mode

  类型:String

  默认值:0777

  设置输出文件的权限

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

定义一个任务,如下:

gulp.task('somename', function() {
  // Do stuff
});

name

任务名,调用任务是只需要gulp.run(任务名)

deps

  类型:Array

  执行当前任务所需要依赖的任务,被依赖的任务会在当前任务执行之前执行。注意异步任务

fn

  需要执行的任务都定义在此处

异步执行任务:

使用回调函数

// run a command in a shell
var exec = require('child_process').exec;
gulp.task('jekyll', function(cb) {
  // build Jekyll
  exec('jekyll build', function(err) {
    if (err) return cb(err); // return error
    cb(); // finished task
  });
});

 

返回一个文件流

gulp.task('somename', function() {
  var stream = gulp.src('client/**/*.js')
    .pipe(minify())
    .pipe(gulp.dest('build'));
  return stream;
});

 

使用promise

var Q = require('q');

gulp.task('somename', function() {
  var deferred = Q.defer();

  // do async stuff
  setTimeout(function() {
    deferred.resolve();
  }, 1);

  return deferred.promise;
});

 

注意任务依赖关系,下面是一个例子:

var gulp = require('gulp');

// takes in a callback so the engine knows when it'll be done
gulp.task('one', function(cb) {
    // do stuff -- async or otherwise
    cb(err); // if err is not null and not undefined, the run will stop, and note that it failed
});

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

gulp.task('default', ['one', 'two']);

 

gulp.watch(glob [, opts], tasks) or gulp.watch(glob [, opts, cb])

监听文件,当文件发生变化时,定义的任务将会被执行。如下当js文件发生改变时会触发change事件。

var watcher = gulp.watch('js/**/*.js', ['uglify','reload']);
watcher.on('change', function(event) {
  console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});

 

或者:

gulp.watch('js/**/*.js', function(event) {
  console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});

 

  

 实例:

下面是一个简单的例子,实现js、css的压缩合并。

package.json安装模块

{
    "name": "",
    "version": "0.0.0",
    "description": "",
    "main": "gulpfile.js",
    "dependencies": {},
    "devDependencies": {
        "gulp": "~3.5.6",
        "gulp-minify-css": "~0.3.0",
        "gulp-uglify": "^1.0.0",
        "gulp-concat": "~2.0.0",
        "gulp-rename": "^1.0.0"
    },
    "license": "ISC"
}

 

 gulpfile.js

var gulp = require('gulp');

// 加载模块
var
    minifycss = require('gulp-minify-css'), // CSS压缩
    uglify = require('gulp-uglify'),        // js压缩
    concat = require('gulp-concat'),        // 合并文件
    rename = require('gulp-rename');        // 重命名


// 合并、压缩、重命名css
gulp.task('min-styles', function() {
  gulp.src(['./static/css/*.css'])
    .pipe(concat('all.css'))
    .pipe(gulp.dest('./static/build/css/'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(minifycss())
    .pipe(gulp.dest('./static/build/css'));
});

// 合并,压缩js文件
gulp.task('min-javascripts', function() {
  gulp.src('./static/js/*.js')
    .pipe(concat('all.js'))
    .pipe(gulp.dest('./static/build/js'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(uglify())
    .pipe(gulp.dest('./static/build/js'));
});


// 定义develop任务发布或者运行时使用
gulp.task('develop',function(){
  gulp.run('min-styles','min-javascripts');
});


// gulp命令默认启动的就是default
gulp.task('default', function() {

  // 监听.css文件,一旦有变化,立刻调用min-styles任务执行
  gulp.watch('./css/*.css', ['min-styles']);

  gulp.run('develop');
});

 在gulpfile.js文件目录下,通过命令窗执行gulp,则default任务就会执行。

 

相关文章
|
4月前
|
jenkins Java 持续交付
【项目集成工具】Jenkins
【项目集成工具】Jenkins
|
Java Linux 网络安全
2021 最新 IntelliJ IDEA配置 远程Docker容器 编写Dockerfile文件 步骤演示(图文版)
目录 一. 配置远程SFTP 1.打开IDEA 2.建个springboot项目 2.1 选择tools 2.2 选择如图所示位置 2.4 出现如下界面,点击三个... 2.5 选择SFTP 2.6 作如下配置,然后点击OK 2.7弹出如下界面,点击见图所示的三个... 2.8 点击加号+ 2.9 配置远程连接信息 2.10测试连接:弹出的界面点击 : 是 2.11 根据需求选择,我这里选择root目录 2.12连接完成 3 右键可以新建文件和目录 3.1 点击小箭头提交数据 二. IDEA配置 Linux 命令行窗口 第一步,点击 tools 第二步; 选择这个ssh 第三步: 连接完成
786 0
2021 最新 IntelliJ IDEA配置 远程Docker容器 编写Dockerfile文件 步骤演示(图文版)
|
7月前
|
XML 数据可视化 jenkins
Jenkins自动构建项目
Jenkins自动构建项目
|
JavaScript 前端开发 jenkins
Jenkins构建bug
构建时报下面这个错误: ```javascript * What went wrong: A problem occurred configuring project ':app'. The SDK directory '/Users/xxx/Documents/develop/sdk' does not exist. ```
|
jenkins Java 关系型数据库
jenkins持续集成从0入门到实战【八】集成sonarqube代码检测
SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检 测。
318 1
jenkins持续集成从0入门到实战【八】集成sonarqube代码检测
|
Web App开发 设计模式 缓存
前端自动化构建之Gulp
本篇文章的核心是介绍一款强大的任务流工具Gulp,之所以题目叫做“前端自动化构建之Gulp”,是因为Gulp本身是使用JS编写的运行在Node环境的一个npm包,并且大部分开发者也都使用它来作为前端项目的自动化构建工具。不过,从本质上说,Gulp并非只能做前端自动化构建,后端构建发布自动化,脚本工具集自动化,测试流程自动化等都可以使用Gulp。所以,无论你是哪个技术栈的开发者,学习使用Gulp都会对你大有裨益。
108 0
|
JSON JavaScript 前端开发
【构建】gulp自动化构建工具入门教程
【构建】gulp自动化构建工具入门教程
【构建】gulp自动化构建工具入门教程
|
缓存 JavaScript 前端开发
自动构建工具Gulp
自动构建工具Gulp
|
jenkins 持续交付 开发工具
SonarQube集成Jenkins自动化检查代码
SonarQube集成Jenkins自动化检查代码
SonarQube集成Jenkins自动化检查代码
|
jenkins Shell 持续交付
jenkins流水线+SonarQube集成检查代码
jenkins流水线+SonarQube集成检查代码
jenkins流水线+SonarQube集成检查代码