Gulp
和grunt类似,gulp也是一个前端自动化构建工具。 ####与 Grunt 的比较
gulp和grunt最显著的区别就是gulp采用编码大于配置,而grunt相反配置大于编码。 gulp是基于流的构建系统,相对更侧重各任务之间的衔接,而grunt侧重于一些通用的任务。 另外gulp更易读,但是grunt相对插件要多。
####安装与配置 安装全局gulp。
$ npm install --global gulp
创建项目,在项目目录下安装gulp。
$ npm install --save-dev gulp
创建gulpfile.js文件,配置gulp。
var gulp = require('gulp');
gulp.task('default', function() {
// place code for your default task here
});
运行gulp:
$ gulp
####定制简单的任务 这次的侧重点放在自动化任务上,而非gulp本身。
首先说明下采用的目录结构为app/css
下存放scss和css样式文件,app/js
目录下存放js脚本文件,app
根目录下存放html结构文件,在dist目录下存放build后的资源文件。
首先说明Build Css文件用到的一些插件:
gulp-ruby-sass:用来将scss文件编译为css文件。
gulp-autoprefixer:用来给css样式自动添加浏览器前缀。
gulp-minify-css:用于css文件的压缩。
流程如下:首先将css目录下scss文件编译为css文件,对css文件添加浏览器前缀,重命名为*.min.css,然后压缩输出到dist/css
目录。
gulp.task('css', function() {
return sass('app/css/', { style: 'expanded' })
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('app/css'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('dist/css'))
.pipe(livereload())
.pipe(notify({ message: 'css task complete' }));
});
然后说明Build Js文件用到的插件
gulp-concat:用来合并文件,这里主要合并js文件。
gulp-uglify:混淆压缩js。
流程如下:首先合并app目录下js文件(我这里想保留js目录结构所以注释掉了合并任务),修改前缀为*.min.js,执行混淆压缩命令 输出到dist/js
目录。
gulp.task('js', function() {
return gulp.src('app/js/**/*.js')
//.pipe(concat('main.js'))
.pipe(gulp.dest('dist/js'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('dist/js'))
.pipe(livereload())
.pipe(notify({ message: 'js task complete' }));
});
接下来说下非常有用的监视任务
gulp-webserver:用于在本地启动Http服务。
gulp-livereload:livereload用于浏览器自动刷新。
首先创建一个watch任务,监测所有资源文件是否发生修改,然后创建一个webserver任务,启动watch任务,webserver任务启动时会自动打开浏览器加载当前app目录下html文件,当watch任务监测到文件修改时就会通知livereload,浏览器就会实时刷新,省去了手动刷新的操作。
//Watch
gulp.task('watch', function() {
// Watch .scss files
gulp.watch('app/css/**/*.scss', ['css']);
// Watch .js files
gulp.watch('app/js/**/*.js', ['js']);
// Watch image files
gulp.watch('app/images/**/*', ['images']);
// Create LiveReload server
livereload.listen();
// Watch any files in dist/, reload on change
gulp.watch(['dist/**']).on('change', livereload.changed);
});
//Server
gulp.task('server', function() {
gulp.src('app')
.pipe(webserver({
livereload: true,
open: true
}));
gulp.start('watch');
});
最后说下clean任务
当你执行build任务,或者想删除build后的文件时,可以用del删除指定目录文件。
var del = require('del');
// Clean
gulp.task('clean', function(cb) {
del(['dist/','app/css/**/*.css'], cb)
});
####有关于我的配置 可参考项目:[hellogulp] [hellogulp]: https://github.com/dandananddada/hellogulp.git 给出配置文件如下:
// Load plugins
var gulp = require('gulp'),
sass = require('gulp-ruby-sass'),
autoprefixer = require('gulp-autoprefixer'),
minifycss = require('gulp-minify-css'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
rename = require('gulp-rename'),
concat = require('gulp-concat'),
notify = require('gulp-notify'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload'),
webserver = require('gulp-webserver'),
del = require('del');
//html
gulp.task('html', function() {
return gulp.src("app/*.html")
.pipe(gulp.dest('dist/'))
.pipe(livereload())
.pipe(notify({ message: 'html task complete' }));
});
// css
gulp.task('css', function() {
return sass('app/css/', { style: 'expanded' })
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('app/css'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('dist/css'))
.pipe(livereload())
.pipe(notify({ message: 'css task complete' }));
});
// js
gulp.task('js', function() {
return gulp.src('app/js/**/*.js')
.pipe(gulp.dest('dist/js'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('dist/js'))
.pipe(livereload())
.pipe(notify({ message: 'js task complete' }));
});
// Images
gulp.task('images', function() {
return gulp.src('app/images/**/*')
.pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
.pipe(gulp.dest('dist/images'))
.pipe(livereload())
.pipe(notify({ message: 'Images task complete' }));
});
// Clean
gulp.task('clean', function(cb) {
del(['dist/','app/css/**/*.css'], cb)
});
// Watch
gulp.task('watch', function() {
//Watch .html files
gulp.watch('app/**/*.html', ['html']);
// Watch .scss files
gulp.watch('app/css/**/*.scss', ['css']);
// Watch .js files
gulp.watch('app/js/**/*.js', ['js']);
// Watch image files
gulp.watch('app/images/**/*', ['images']);
// Create LiveReload server
livereload.listen();
// Watch any files in dist/, reload on change
gulp.watch(['dist/**']).on('change', livereload.changed);
});
//Build
gulp.task('build', ['clean'], function() {
gulp.start('html','css', 'js', 'images');
});
//Server
gulp.task('server', function() {
gulp.src('app')
.pipe(webserver({
livereload: true,
open: true
}));
gulp.start('watch');
});
//Default task
gulp.task('default', ['build']);