《gulp常用插件》


2018-03-23 上次更新时间:8/4/2020, 8:24:44 PM 0 工具类

# 文件操作

# 删除文件/文件夹

const del = require('del');

del('./dist'); // 删除整个dist文件夹
1
2
3

# 重命名文件

const rename = require('gulp-rename');

gulp.src('./hello.txt')
  .pipe(rename('gb/goodbye.md'))    // 直接修改文件名和路径
  .pipe(gulp.dest('./dist')); 
gulp.src('./hello.txt')
  .pipe(rename({
    dirname: "text",                // 路径名
    basename: "goodbye",            // 主文件名
    prefix: "pre-",                 // 前缀
    suffix: "-min",                 // 后缀
    extname: ".html"                // 扩展名
  }))
  .pipe(gulp.dest('./dist'));
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 合并文件

const concat = require('gulp-concat');

gulp.src('./js/*.js')
    .pipe(concat('all.js'))         // 合并all.js文件
    .pipe(gulp.dest('./dist'));
    
gulp.src(['./js/demo1.js','./js/demo2.js','./js/demo2.js'])
    .pipe(concat('all.js'))         // 按照[]里的顺序合并文件
    .pipe(gulp.dest('./dist'));
1
2
3
4
5
6
7
8
9

# 文件过滤

const filter = require('gulp-filter');


const f = filter(['**', '!*/index.js']);
gulp.src('js/**/*.js')
    .pipe(f)                        // 过滤掉index.js这个文件
    .pipe(gulp.dest('dist'));

const f1 = filter(['**', '!*/index.js'], {restore: true});
gulp.src('js/**/*.js')
    .pipe(f1)                       // 过滤掉index.js这个文件
    .pipe(uglify())                 // 对其他文件进行压缩
    .pipe(f1.restore)               // 返回到未过滤执行的所有文件
    .pipe(gulp.dest('dist'));       // 再对所有文件操作,包括index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# js 压缩

const uglify = require('gulp-uglify');

gulp.src('./hello.js')
    .pipe(uglify())                 // 直接压缩hello.js
    .pipe(gulp.dest('./dist'))
    
 gulp.src('./hello.js')
    .pipe(uglify({
        mangle: true,               // 是否修改变量名,默认为 true
        compress: true,             // 是否完全压缩,默认为 true
        preserveComments: 'all'     // 保留所有注释
    }))
    .pipe(gulp.dest('./dist'))
1
2
3
4
5
6
7
8
9
10
11
12
13

# css 压缩

const minifyCss = require('gulp-minify-css');

function gulpStyles() {
    return gulp.src(['./css/*.css'])
        .pipe(assetRev())
        .pipe($.minifyCss())
        .pipe(concat('main.css'))
        .pipe(gulp.dest("_dist/css"));
}
1
2
3
4
5
6
7
8
9

# html 压缩

const htmlminify = require('gulp-html-minify');

gulp.src('index.html')
    .pipe(htmlminify())
    .pipe(gulp.dest('./dist'))
1
2
3
4
5

# 图片压缩

const imagemin = require('gulp-html-minify');

gulp.src('./img/*.{jpg,png,gif,ico}')
    .pipe(imagemin())
    .pipe(gulp.dest('./dist/img'))
1
2
3
4
5

# zip 压缩文件

const zip = require('gulp-zip');

gulp.src('./src/*')
    .pipe(zip('all.zip'))  // 压缩成all.zip文件
    .pipe(gulp.dest('./dist'))
1
2
3
4
5

# JS/CSS 自动注入

# 为css添加浏览器前缀

const autoprefixer = require('gulp-autoprefixer');

gulp.src('./css/*.css')
    .pipe(autoprefixer())           // 直接添加前缀
    .pipe(gulp.dest('dist'))

gulp.src('./css/*.css')
    .pipe(autoprefixer({
        browsers: ['last 2 versions'],      // 浏览器版本
        cascade:true                       // 美化属性,默认true
        add: true                           // 是否添加前缀,默认true
        remove: true                        // 删除过时前缀,默认true
        flexbox: true                       // 为flexbox属性添加前缀,默认true
    }))
    .pipe(gulp.dest('./dist'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 解析HTML文件中的构建块

index.html

<!-- build:css /css/all.css -->
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/main.css">
<!-- endbuild -->
1
2
3
4

gulpfile.js

var useref = require('gulp-useref');

gulp.src('index.html')
    .pipe(useref())
    .pipe(gulp.dest('./dist'))
    
1
2
3
4
5
6

替换后

<!-- 之前的两个<link>替换成一个了 -->
<link rel="stylesheet" href="css/all.css">  
1
2

# 给静态资源文件名添加hash值

var rev = require('gulp-rev');

gulp.src('./css/*.css')
    .pipe(rev())
    .pipe(gulp.dest('./dist/css'))  // unicorn.css => unicorn-d41d8cd98f.css
1
2
3
4
5

# 重写被gulp-rev重命名的文件名。

会生成对应的rev.json,就可以用来替换html中对应的文件了

var rev = require('gulp-rev');
var revReplace = require('gulp-rev-replace');
var useref = require('gulp-useref');

gulp.src('index.html')
    .pipe(useref())                         // 替换HTML中引用的css和js
    .pipe(rev())                            // 给css,js,html加上hash版本号
    .pipe(revReplace())                     // 把引用的css和js替换成有版本号的名字
    .pipe(gulp.dest('./dist'))
    
1
2
3
4
5
6
7
8
9
10

# 替换html中的构建块

index.html

<!-- css是buildName,可以自己定义 -->
<!-- build:css -->                          
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/main.css">
<!-- endbuild -->

1
2
3
4
5
6

gulpfile.js

var htmlreplace = require('gulp-html-replace');

gulp.src('index.html')
    .pipe(htmlreplace({
        'css':'all.css' // css是index.html中定义的buildName
    }))
    .pipe(gulp.dest('./dist'))

1
2
3
4
5
6
7
8

替换后

<!-- 之前的两个<link>替换成一个了 -->
<link rel="stylesheet" href="all.css">
1
2

# 流控制

# 条件判断

var gulpif = require('gulp-if');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var condition = true; 

gulp.src('./js/*.js')
    .pipe(gulpif(condition, uglify(), concat('all.js')))  // condition为true时执行uglify(), else 执行concat('all.js')
    .pipe(gulp.dest('./dist/'));
1
2
3
4
5
6
7
8

# 工具

# gulp-load-plugins

从包的依赖和附件里加载gulp插件到一个对象里给你选择。

package.json

"devDependencies": {
    "gulp": "^3.9.1",
    "gulp-concat": "^2.6.1",
    "gulp-rename": "^1.2.2",
    "gulp-uglify": "^2.0.1"
}
1
2
3
4
5
6

gulpfile.js


var $ = require('gulp-load-plugins')();     // $ 是一个对象,加载了依赖里的插件

gulp.src('./**/*.js')
    .pipe($.concat('all.js'))               // 使用插件就可以用$.PluginsName()
    .pipe($.uglify())
    .pipe($.rename('all.min.js'))
    .pipe(gulp.dest('./dist'))
1
2
3
4
5
6
7
8

# gulp-sass

编译sass

var sass = require('gulp-sass');

gulp.src('./sass/**/*.scss')
    .pipe(sass({
        outputStyle: 'compressed'           // 配置输出方式,默认为nested
    }))
    .pipe(gulp.dest('./dist/css'));
    
gulp.watch('./sass/**/*.scss', ['sass']);   // 实时监听sass文件变动,执行sass任务
1
2
3
4
5
6
7
8
9

# gulp-babel

将ES6代码编译成ES5。

var babel = require('gulp-babel');

gulp.src('./js/index.js')
    .pipe(babel({
        presets: ['es2015']
    }))
    .pipe(gulp.dest('./dist'))
1
2
3
4
5
6
7

# demo

var gulp = require('gulp'),
    less = require('gulp-less'),
    sourcemaps = require('gulp-sourcemaps'),
    csso = require('gulp-csso'),
    concat = require('gulp-concat'),
    autoprefixer = require('gulp-autoprefixer'),
    notify = require('gulp-notify'),
    plumber = require('gulp-plumber');

gulp.task('compileLess', function () {
    gulp.src('./public/app/topwap/statics/stylesheets/less/*.less')
        .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')})) //当发生异常时提示错误,但并不会终止watch
        .pipe(concat('huohuo.css'))
        .pipe(sourcemaps.init())
        .pipe(less())
        .pipe(autoprefixer())
        .pipe(sourcemaps.write())
        .pipe(csso())
        .pipe(gulp.dest('./public/app/topwap/statics/stylesheets/debug'));
});

gulp.task('watchCompile', function () {
    gulp.watch('./public/app/topwap/statics/stylesheets/less/*.less', ['compileLess']);
});

// 默认
gulp.task('default', ['watchCompile']);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
上次更新时间: 8/4/2020, 8:24:44 PM