Gulp

发布时间:2019-08-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Gulp脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

简介

工程化工具

作用:

实现代码部署
css,JS,htML代码压缩
ES6,less,styls代码编译
图片优化
...

原理:
基于unix中管道概念,stream流,前一个操作的输出作为后一个操作输入。

Gulp入口文件

gulpfile.js 每个项目中都需要有这个文件,当执行gulp会自动执行该文件。

task()

定义一个任务
gulp.task(name, [deps], fn);
参数1: name任务的名称
参数2: deps依赖的任务, 依赖的任务要先于当前任务执行.
参数3: fn任务的回调函数

// 开启任务
gulp.task('zf', function () {
    
});

// 启动任务
gulp.task('default', ['zf']);

顺序执行任务,需要添加依赖.

src()

将文件转换成stream
gulp.src(filePath, options);
参数1:filePath 文件路径,如果存在不同的文件,有两种方式表示

* 数组: ['a.js', 'b.css']
* globs表达式: ['.js']  // 表示 a.js aa.js abc.js 注意不能够有目录符.
gulp.src('js/index.js')

piPE()

处理每个阶段的流.
这些管道依次排开,前一个管道输出作为后一个管道的输入,从而控制流向.

Stream
复杂的加工过程分割成一系列独立的工序,这些工序可以反复被使用,在需要的时候还可以替换和重组.

Gulp

dest()

将文件写入某个目录或者文件中
gulp.dest(path);

// 开启任务
gulp.task('zf', function () {
    
    // 创建流
    VAR stream = gulp.src('js/index.js');
    
    // 写入位置
    var pos = gulp.dest('test');
    
    // 管理状态
    stream.pipe(pos);
    
});

// 启动任务
gulp.task('default', ['zf']);

文件监听

watch(), 监听文件的变化.
文件变化的条件:写入,修改,删除,发生一个操作:保存文件

用法1:
watch(globs, fn);
参数1: 文件的globs路径表示
参数2: 回调函数,回调函数中的参数: type->表示操作的类型 changed,deleted,added. path->操作的文件路径

gulp.watch('js/*.js', function ( ev ) {
    
    // 流
    var stream = gulp.src('js/*.js');
    
    // 写入位置
    var pos = gulp.dest('test');
    
    // 管理流 状态
    stream.pipe(pos);
    
});


gulp.task('default');

用法2:
gulp.watch(globs, deps);
参数1: 文件的路径
参数2: deps任务(task)集合

// 多个状态
gulp.task('zf', function () {
    
    // 流 
    var stream = gulp.src('js/*.js');
    
    // 写入位置
    var pos = gulp.dest('test');
    
    // 管理流
    stream.pipe(pos);
    
});

gulp.task('default'); 

gulp.watch('js/*.js', ['zf']);

globs

* 表示任意字符(除了目录符号,不能包括扩展名)
** 表示任意字符(可以包括目录符号,不能包括扩展名)
混合使用:**/*.js 包含所有js文件 。 lib/**/*.js 表示lib文件下所有js文件

*.js* 号匹配当前目录任意文件. *.js匹配当前目录下所有的js文件
**/*.js : 匹配当前目录及其子目录下的所有js文件
!mian.js : ! 号移除匹配的文件,这里 移除 mian.js
*.+(js|json): +号后面跟着括号,里面的元素用| 分割,匹配多个选项。这边将匹配js文件和json文件
{} :匹配多个属性 例如:src/{a,b}.js 包含a.js和b.js文件 。 src/*.{jpg,png,gif} src下所有的jpg/png/gif文件

插件

npm gulp 插件 gulp-插件
gulp 官方插件 gulp-官方插件

文件重命名

gulp-rename
rename(); 参数:重命名的文件新名字
npm install gulp-rename

var gulp = require('gulp');

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


gulp.task('renameJs', function () {
    
    var stream = gulp.src('js/*.js');
    
    // 位置
    var desc = gulp.dest('test');
    
    // 修改名字
    var name = rename('app.js');
    stream.pipe(name);
    
    // 监听流
    stream.pipe(desc);
    
});

gulp.task('default', ['renameJs']);

JS压缩

gulp-unlify
npm install gulp-unlify

var gulp = require('gulp');

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

gulp.task('unlifyJs', function () {
    
    // 流
    var stream = gulp.src('js/**/*.js');
    
    // 位置
    var pos = gulp.dest('test/js');
    
    // 压缩
    stream.pipe(uglify())
    // 监听流
    .pipe(pos);    
    
});

gulp.task('default', ['unlifyJs']);

CSS压缩

压缩CSS
gulp-minify-css 和 gulp-clean-css
npm install gulp-minify-css

var gulp = require('gulp');
var minfiyCss = require('gulp-minify-css');


// 开启任务
gulp.task('lockCss', function () {
    
    // 流
    var stream = gulp.src('css/*.css');
    
    // 位置
    var pos = gulp.dest('test/css');
    
    // 压缩
    stream.pipe(minfiycss())
    // 管理流
    .pipe(pos);
    
});

gulp.task('default', ['lockCss']);

HTML压缩

gulp-minify-html

gulp.task('lockHtml', function () {
    
        var stream = gulp.src('*.html');
        
        var pos = gulp.dest('test');
        
        stream.pipe(miniyhtml())
        .pipe(pos);
        
});
gulp.task('default', ['lockHtml']);

文件合并

gulp-concat

concat();
参数: 文件合并后的文件名

// 合并文件 
gulp.task('concatFs', function () {
    
    // 流
    var stream = gulp.src('js/**/*.js');
    
    // 合并文件
    stream.pipe(concat('main.js'))
    // 压缩文件
    .pipe(uglify())
    // 监听流
    .pipe(gulp.dest('test/js'));
    
});

gulp.task('default', ['concatFs']);

语法校验

js语法校验
gulp-jslint

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

// 校验js中的代码
gulp.task('jslint', function () {

    var stream = gulp.src('js/index.js');
    
    // 先校验
    stream .pipe(jslint())
    .pipe(gulp.dest('demo'))
    
});

// 启动任务
gulp.task('default', ['jslint']);

图片压缩

gulp-imagemin
压缩:gif,jpg,png 等常用类型图片格式

如果报错找不到需要依赖模块,手动npm拉去文件:
imagemin-gifsicle
imagemin-jpegtran
imagemin-optipng

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

// 创建任务
gulp.task('dealimg', function () {

    gulp.src('img/*.*')
    // 压缩图片
    .pipe(imagemin())
    .pipe(gulp.dest('demo'))
    
});

// 启动任务
gulp.task('default', ['dealImg']);

增加前缀

gulp-autoprefixer
测试过程中使用autoperfixer执行失败
var autoperfixer = reuqire('gulp-autoPRefixer');

// 加CSS前缀
gulp.task('atuo', function () {

gulp.src('css/css.css')
    .pipe(prefixer())
    .pipe(gulp.dest('dist'));

});
gulp.task('default', ['atuo']);

编译Less,Sass

插件:gulp-less
插件:gulp-sass

// 编译Less文件
gulp.task('atuo', function () {
    
    gulp.src('**/*.less')
        .pipe(less())
        .pipe(gulp.dest('test'));
    
});

// 编译Sass文件
gulp.task('atuo', function () {
    
    gulp.src('**/*.sass')
        .pipe(sass())
        .pipe(gulp.dest('test'));
    
});

gulp指令

@H_410_777@gulp // 执行文件 gulp 任务名称 // gulp atuo;

gulpfile

var gulp    = require('gulp'),
    jshint    = require('gulp-jshint'),
    sass    = require('gulp-sass'),
    concat    = require('gulp-concat'),
    uglify    = require('gulp-uglify'),
    rename    = require('gulp-rename'),
    imagemin    = require('gulp-imagemin'),
    minifycss    = require('gulp-minify-css'),
    livereload    = require('gulp-livereload'),
    connect    = require('gulp-connect');
 
// 检查脚本
gulp.task('lint', function(){
    gulp.src('./src/js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

// 编译Sass
gulp.task('sass', function(){
    gulp.src('./src/sass/*.scss')
        .pipe(sass())
        .pipe(gulp.dest('./dist/css'));
});

// 合并,压缩js
gulp.task('scripts', function(){
    gulp.src('./src/js/*.js')
        // .pipe(concat('all.js'))
        .pipe(gulp.dest('./dist/js'))
        // .pipe(rename('all.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/js'))
        .pipe(connect.reload());
});

// 压缩图片
gulp.task('imagESMin', function(){
    gulp.src('./src/images/*.{png,jpg,gif,ico}')
        .pipe(imagemin({
            optimizationLevel: 5, //类型:Number  默认:3  取值范围:0-7(优化等级)
            progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
            interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
            multipass: true //类型:Boolean 默认:false 多次优化svg直到完全优化
        }))
        .pipe(gulp.dest('./dist/images'))
});

// 监听html
gulp.task('html', function () {
      gulp.src('./src/*.html')
          .pipe(gulp.dest('./dist'))
        .pipe(connect.reload());
});

// 压缩,合并css
gulp.task('css', function() {
    gulp.src('src/css/*.css')
        // .pipe(concat('main.css'))
        // .pipe(gulp.dest('./dist/css'))
        .pipe(rename({ suffix: '.min' }))
        .pipe(minifycss())
        .pipe(gulp.dest('./dist/css'))
        .pipe(connect.reload());
});

// 监听
gulp.task('watch', function(){
    gulp.watch('./src/js/*.js', ['lint', 'scripts']);
    gulp.watch('./src/css/*.css', ['css']);
    gulp.watch('./src/*.html', ['html'])
});

// server
gulp.task('connect', function () {
  connect.server({
    root: './dist',
    livereload: true
  });
});

// 其他任务
gulp.task('release', ['html', 'lint','scripts','sass','css','imagesmin']);

// 默认任务
gulp.task('default', ['release', 'connect', 'watch']);

脚本宝典总结

以上是脚本宝典为你收集整理的Gulp全部内容,希望文章能够帮你解决Gulp所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。