前端自动化构建工具gulp使用

1. 全局安装 gulp:

$ npm install --global gulp

2. 作为项目的开发依赖(devDependencies)安装:

$ npm install --save-dev gulp

3. 在项目根目录下创建一个名为 package.json 的文件:

附上本人项目基本配置

{
"devDependencies": {
"concat": "0.0.1-security",
"gulp": "^3.9.1",
"gulp-autoprefixer": "^3.1.1",
"gulp-cache": "^0.4.5",
"gulp-clean": "^0.3.2",
"gulp-concat": "^2.6.1",
"gulp-connect": "^5.0.0",
"gulp-css-spriter": "^0.4.0",
"gulp-htmlmin": "^3.0.0",
"gulp-imagemin": "^3.1.1",
"gulp-jshint": "^2.0.4",
"gulp-less": "^3.3.0",
"gulp-livereload": "^3.8.1",
"gulp-minify-css": "^1.2.4",
"gulp-notify": "^3.0.0",
"gulp-rename": "^1.2.2",
"gulp-rev": "^7.1.2",
"gulp-rev-collector": "^1.1.1",
"gulp-ruby-sass": "^2.1.1",
"gulp-sass": "^3.1.0",
"gulp-sequence": "^0.4.6",
"gulp-sourcemaps": "^2.4.1",
"gulp-uglify": "^2.0.1",
"gulp-util": "^3.0.8",
"gulp-watch-path": "^0.1.0",
"gulp-webserver": "^0.9.1",
"htmlmin": "0.0.7",
"http-server": "^0.9.0",
"imagemin-pngquant": "^5.0.0",
"jshint": "^2.9.4",
"run-sequence": "^1.2.2",
"sass": "^0.5.0",
"stream-combiner2": "^1.1.1"
},
"dependencies": {
"browser-sync": "^2.18.8",
"gulp": "^3.9.1",
"gulp-imagemin": "^3.2.0",
"gulp-sass": "^3.1.0",
"gulp.spritesmith": "^6.4.0"
}
}

4. 项目目录结果:

5. 在项目根目录下创建一个名为 gulpfile.js 的文件:

var gulp = require('gulp'),
less = require('gulp-less'),
sass = require('gulp-sass'),
connect = require('gulp-connect'),
livereload = require('gulp-livereload'),
sourcemaps = require('gulp-sourcemaps'),
htmlmin = require('gulp-htmlmin'),
minifycss = require('gulp-minify-css'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
jshint = require('gulp-jshint'),
notify = require('gulp-notify'),
imagemin = require('gulp-imagemin'),
pngquant = require('imagemin-pngquant'),
runSequence = require('run-sequence'),
rev = require('gulp-rev'),
cache = require('gulp-cache'),
autoprefixer = require('gulp-autoprefixer'),
clean = require('gulp-clean'),
revCollector = require('gulp-rev-collector'),
spritesmith = require('gulp.spritesmith');

//合并雪碧图
gulp.task('sprite', function() {
var spriteData = gulp.src('src/images/icon_*.png').pipe(spritesmith({
imgName: 'images/sprite.png',
cssName: 'sass/_sprite.scss',
cssFormat: 'scss'
}));
return spriteData.pipe(gulp.dest('src/'));
});
// less编译
gulp.task('less', function() {
gulp.src('src/less/*.less')
.pipe(sourcemaps.init())
.pipe(less())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('src/css/'));
});


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

 

//自动生成版本号,避免缓存
gulp.task('revImg', function() {
return gulp.src('src/images/*')
.pipe(rev())
.pipe(rev.manifest())
.pipe(gulp.dest('src/rev/img'));
});
gulp.task('revCss', function() {
return gulp.src('src/css/*.css')
.pipe(rev())
.pipe(rev.manifest())
.pipe(gulp.dest('src/rev/css'));
});

gulp.task('revJs', function() {
return gulp.src('src/js/*.js')
.pipe(rev())
.pipe(rev.manifest())
.pipe(gulp.dest('src/rev/js'));
});

//Html替换img、css、js文件版本
gulp.task('revHtml', function() {
return gulp.src(['src/rev/**/*.json', 'src/html/*.html'])
.pipe(revCollector())
.pipe(gulp.dest('src/html'));
});
//scss替换img文件版本
gulp.task('revScss', function() {
return gulp.src(['src/rev/**/*.json', 'src/sass/*.scss'])
.pipe(revCollector())
.pipe(gulp.dest('src/sass'));
});

//开发构建
gulp.task('dev', function(done) {
condition = false;
runSequence(
['revImg'], ['revCss'], ['revScss'], ['revJs'], ['revHtml'],
done);
});


//css合并处理
// gulp.task('minifycss',function(){
// return gulp.src('css/*.css') //设置css
// .pipe(concat('order_query.css')) //合并css文件到"order_query"
// .pipe(gulp.dest('styles')) //设置输出路径
// .pipe(rename({suffix:'.min'})) //修改文件名
// .pipe(minifycss()) //压缩文件
// .pipe(gulp.dest('styles')) //输出文件目录
// .pipe(notify({message:'css task ok'})); //提示成功
// });

// //JS合并处理
// gulp.task('minifyjs',function(){
// return gulp.src('js/*.js') //选择合并的JS
// .pipe(concat('order_query.js')) //合并js
// .pipe(gulp.dest('dist/js')) //输出
// .pipe(rename({suffix:'.min'})) //重命名
// .pipe(uglify()) //压缩
// .pipe(gulp.dest('dist/js')) //输出 
// .pipe(notify({message:"js task ok"})); //提示
// });

 

//压缩html
gulp.task('html', function() {
var options = {
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true, //删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
minifyJS: true, //压缩页面JS
minifyCSS: true //压缩页面CSS
};
gulp.src('src/html/*.html')
.pipe(htmlmin(options))
.pipe(gulp.dest('dist/html'));
});

 


// JS hint 检查
// gulp.task('jshint', function() {
// gulp.src('src/js/*.js')
// .pipe(jshint())
// .pipe(jshint.reporter('default'));
// });

//压缩js
gulp.task('uglifyjs', function() {
gulp.src('src/js/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist/js'))
});

//压缩css
gulp.task('minifycss', function() {
gulp.src('src/css/*.css')
.pipe(minifycss())
.pipe(gulp.dest('dist/css'))
});

//压缩images
gulp.task('imagemin', function() {
gulp.src('src/images/*.{png,jpg,gif,ico}')
.pipe(imagemin({
progressive: true,
svgoPlugins: [{ removeViewBox: false }], //不要移除svg的viewbox属性
use: [pngquant()] //使用pngquant深度压缩png图片的imagemin插件
}))
.pipe(gulp.dest('dist/images'));
});

//创建本地服务器
gulp.task('webserver', function() {
connect.server({
livereload: true
});
});

//清空项目输出目录
gulp.task('clean', function() {
return gulp.src(['dist/js/', 'dist/css/', 'dist/html/', 'dist/images/'], { read: false })
.pipe(clean());
});


//监控文件变化
gulp.task('watch', function() {

gulp.watch('src/less/*.less', ['less']);
gulp.watch('src/sass/*.scss', ['sass']);
gulp.watch('src/html/*.html', ['html']);
gulp.watch('src/js/*.js', ['uglifyjs']);
gulp.watch('src/css/*.css', ['minifycss']);
gulp.watch('src/images/*.*', ['imagemin']);
gulp.watch('src/images/icon_*.png', ['sprite']);

});

// 将你的默认的任务代码放在这
gulp.task('default', ['clean'], function() {
gulp.start('less', 'sass', 'uglifyjs', 'minifycss', 'html', 'imagemin', 'dev', 'watch', 'webserver', "sprite");
// gulp.start('less', 'sass', 'uglifyjs', 'minifycss', 'html', 'imagemin', 'dev', 'watch', 'webserver');
});

6. 运行 gulp:

$ gulp

原文地址:https://www.cnblogs.com/zhuzeliang/p/6780074.html