Gulp简单学习

版权声明:杨念 https://blog.csdn.net/qq_34178990/article/details/81507954

Gulp 特点

  1. 易于使用
  2. 构建快速
  3. 插件高质量
  4. 易于学习

安装

  1. 全局安装: npm install –global gulp
  2. 作为项目开发依赖安装: npm install –save-dev gulp

运行gulp

  1. 在项目根目录创建一个名为gulpfile.js的文件
  2. 使用gulp命令运行: gulp (运行默认的任务)

原理

在gulpfile.je或gulpfile.babel.js里定义任务,通过gulp命令执行任务。

如何定义任务

gulpfile.js

import gulp from 'gulp'
gulp.task('css', ()=>{
    return gulp.src('app/**/*.css')//获取源文件的css文件, 
        .pipe(gulp.dest('server/public'))//将css文件原封不动的拷贝到server目录去
})

scripts.js

import gulp from 'gulp'
import gulpif from 'gulp-if'
import concat from 'gulp-concat'
import webpack from 'webpack'
import gulpWebpack from 'webpack-stream'
import named from 'vinyl-named'
import livereload from 'gulp-livereload'
import plumber from 'gulp-plumber'
import rename from 'gulp-rename'
import uglify from 'gulp-uglify'

gulp.task('scripts', ()=> {
    return gulp.src(['app/js/index.js'])//打开文件
        .pipe(plumber({//错误处理
            errorHandler: function(){
            }
        }))
        .pipe(named())//重命名
        .pipe(gulpWebpack({
            module:{
                loaders: [{
                    test: /\.js$/,
                    loader: 'babel-loader'
                }]
            }
        }), null, (err, stats)=>{
            log(`Finished ${color.cyan('scripts')}`, stats.toString({}
                chunks: false
            ))  
        })
        .pipe(gulp.dest('server/public/js'))
        .pipe(rename({
            basename: 'cp',
            extname: 'min.js'   
        }))
        .pipe(uglify({
            compress: {
                properties: false   
            },
            output:{
                'quote_keys': true
            }   
        }))//压缩
        .pipe(gulp.dest('server/public/js'))
        .pipe(gulpif(args.watch, livereload()))//当文件改变了以后自动刷新: 使用gulpif做判断, 执行livereload()
})

以上写了两个文件, 分别定义了css任务, 和scripts任务。 其中scripts任务可以通过模块引入到gulpfile.js中。

注意:

从以上代码可以看出, 使用gulp.task 定义任务;在任务的回调中, 返回这个任务是怎么操作的。

任务基本流程是:

  1. 使用的gulp.src()获取我们要处理的源文件
  2. 使用pipe()方法依次给源文件做相应处理
  3. 使用gulp.dest()方法将源文件输出

多说一句

gulp中的每个任务,以流的形式处理源文件文件。 可以比作水管,水管中流的水就是我们的源文件, 用gulp.src方法将我们的源文件流入到水管中, pipe就好比水管中的节点, 在节点处我们可以截获水流, 并做一些我们想要做的事,gulp中一般使用第三方插件来做该处理, gulp.dest就是水管的出口

gulp API

  1. gulp.src(globs[, options])

    输出符合所提供的匹配模式或匹配模式的数组的文件。 将返回一个vinyl files的stream它可以被piped到被的插件中
    
  2. gulp.dest(path[, options])

    能被pipe进来, 并将会写文件。 并且重新输出所有数据, 因此你可以将它pipe到多个文件夹。 如果不存在, 将会自动创建它。 
    gulp.src('./client/templates/*.jade')
        .pipe(jade())
        .pipe(gulp.dest('./build/template'))
        .pipe(minify())
        .pipe(gulp.dest('./build/minified_templates'))
    
  3. gulp.task(name[, deps], fn)

    定义一个使用Orchestrator实现的任务(task)
    gulp.task('somename', function(){
        //做一些事
    })
    deps: 类型Array
    一个包含任务列表的数组, 这些任务会在你当前任务运行之前完成
    gulp.task('mytask', ['array', 'of', 'task', 'name' ], function(){
        //做一些事  
    })
    
  4. gulp.watch(glob[, opts], tasks)或者gulp.watch(glob[, opts, cb])

    监听文件, 并且可以在文件发生改动时候做一些事。 它总会返回一个EventEmitter来发射(emit)change事件。
    

gulp常用插件

  1. gulp-if //有条件的运行一个任务
  2. gulp-live-server
  3. gulp-concat //合并文件
  4. webpack
  5. webpack-stream
  6. vinyl-named
  7. gulp-rename //重命名文件
  8. gulp-sequence
  9. del //删除dest文件
  10. gulp.filter//在虚拟文件流中过渡过滤文件
  11. gulp-uglify//压缩js文件大小
  12. gulp-csso //压缩优化css
  13. gulp-html-minify//压缩html
  14. gulp-imagemin//压缩图片
  15. gulp-zip//zip雅座文件
  16. gulp-autoprefixer//自动为css添加浏览器前缀
  17. gulp-sass//编译sass
  18. gulp-babel//将ES6编译为es5

https://github.com/lin-xin/blog/issues/2

猜你喜欢

转载自blog.csdn.net/qq_34178990/article/details/81507954