Gulp介绍和实战

Gulp中文主页
一个重要前提:gulp在4.0以后做了结构上的调整,如果用3.x版本习惯的话,要回退到3.x版本,

  npm install gulp@3 --save-de

[TOC]

Gulp rumen

Gulp入门

  1. 作用
    前端项目构建工具,基于nodejs的自动任务运行器,能自动完成javascript/coffee/sass/less/html/image/css等文件的合并、压缩、检查、监听文件变化、浏览器自动刷新、测试等任务
  2. 特点
  • 任务化,
  • 基于流(I/O)gulp将本地文件读入gulp内存,处理后在输出到本地文件
  • 异步/同步:通过return来实现异步
  1. API
  • gulp.src(filePath/pathArr)
    指向指定路径的所有文件,返回文件流对象
    用于读取文件
  • gulp.dest(dirPath/pathArr)
    指向指定的所有文件夹
    用于向文件夹中输出文件
  • gulp.task(name, [deps], fn)
    定义一个任务
  • gulp.watch()
    监视文件的变化
  1. gulp插件
  • gulp-concat:合并文件(js/css)
  • gulp-ugify:压缩js文件
  • gulp-rename:文件重命名
  • gulp-less:编译less
  • gulp-clean-css: 压缩css
  • gulp-livereload:实时自动编译刷新

Gulp实战

  1. 创建目录:
└─src
    │  gulpfile.js
    │  index.html
    │  package.json
    │
    ├─css
    ├─js
    └─less
  1. 创建gulpfile.js
    npm install gulp --save-dev
    npm install gulp-concat gulp-uglify gulp-rename --save-dev
var gulp = require("gulp");

//注册任务
gulp.task("任务名", function () {
    //配置任务的操作

})
//注册默认任务
gulp.task('default',['任务名'])
  1. 合并js文件

js目录下创建test1.js, test2.js
test1.js

(function () {
    function foo(num1, num2) {
        return num1 + num2
    }
    console.log(foo(22, 56))
})()

test2.js

(function () {
    var result = [1,2,3,4,5].map(function(item, index){
        return item+10
    })
    console.log(result)
})()

gulpfile.js
引入gulp-concat, gulp-uglify, gulp-rename, 分别对应合并文件、压缩文件和重命名文件

var concat = require('gulp-concat')
var uglify = require('gulp-uglify')
var rename = require('gulp-rename')
gulp.task('js', function () {
    return gulp.src('src/js/*.js') //找到目标文件,将数据读取到gulp的内存中
    .pipe(concat('build.js'))   //临时合并文件为build.js
    .pipe(gulp.dest('dist/js/'))   //输出到本地
    .pipe(uglify())   //压缩文件
    .pipe(rename({suffix:'.min'}))  //重命名文件,加min前缀
    .pipe(gulp.dest('dist/js'))
})

注册默认任务

gulp.task('default',[])
压缩css和less
npm install gulp-less gulp-clean-css --save-dev

test1.css

#div1{
    width: 100px;
    height: 100px;
    background-color: red;
}

test2.css

#div2{
    width: 100px;
    height: 100px;
    background-color: bule;
}

test3.less

@base:yellow;
.index1{color: @base};
.index2{color: green;}

代码:

//注册转换less的任务
gulp.task('less', function () {
    return gulp.src('src/less/*.less')
    .pipe(less())   //编译less文件为css文件
    .pipe(gulp.dest('src/css/'))
})

压缩css

//注册合并压缩css文件
gulp.task('css', function () {
    return gulp.src('src/css/*.css')
    .pipe(concat('build.css'))
    .pipe(rename({suffix:'.min'}))
    .pipe(cssClean({compatibility:'ie8'}))
    .pipe(gulp.dest('dist/css/'))
})
压缩html

引入gulp-htmlmin

npm install gulp-htmlmin --save-dev
半自动构建

引入gulp-livereload

npm install gulp-livereload --save-dev

注册监听任务

//注册监视任务
gulp.task('watch', ['default'], function () {
    //开启监听
    livereLoad.listen()
    //确认监听目标已经绑定相应的任务
    gulp.watch('src/js/*.js', ['js'])
    gulp.watch(['src/css/*.css','src/less/*.less'],['css'])
})
全自动构建

引入插件
在需要监听的任务中加入

 .pipe(livereLoad()) //实时刷新

命令行执行

$ gulp watch
[15:21:02] Using gulpfile C:\Workspace\Code\MyProject\Web\gulp_test\src\gulpfile.js
[15:21:02] Starting 'js'...
[15:21:02] Starting 'less'...
[15:21:02] Starting 'html'...
[15:21:02] Finished 'less' after 200 ms
[15:21:02] Starting 'css'...
[15:21:02] Finished 'html' after 205 ms
[15:21:02] Finished 'js' after 380 ms
[15:21:02] Finished 'css' after 216 ms
[15:21:02] Starting 'default'...
[15:21:02] Finished 'default' after 124 μs
[15:21:02] Starting 'watch'...
[15:21:02] Finished 'watch' after 102 ms

比如更改css文件,

[15:18:21] Starting 'css'...
[15:18:21] C:\Workspace\Code\MyProject\Web\gulp_test\src\dist\css\build.min.css reloaded.

自动加载对应css文件

全自动构建

引入插件, gulp-connect是创建一个小型服务器,open是用于自动在浏览器中打开地址

npm install gulp-connect --save-dev
npm install open --save-dev

全自动任务

//注册全自动监视任务
gulp.task('server',['default'], function () {
    //配置服务器的选项
    connect.server({
        root:'dist/',
        livereload:true,
        port:5000
    })
    gulp.watch('src/js/*.js', ['js'])
    gulp.watch(['src/css/*.css','src/less/*.less'],['css'])
})

open('http://localhost:5000/')

在需要监听的任务中加入:

.pipe(connect.reload()) //实时刷新

然后执行

gulp server
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容