gulp安装与操作
一、安装nodejs
1. 下载nodejs安装包
去nodejs官网下载软件https://nodejs.org
2. 测试nodejs是否安装
打开npm
node -v
二、安装gulp
1. 全局安装gulp
打开npm
npm install –g gulp
2. 本地安装gulp
建立项目,我的项目结构

打开npm进入根目录,安装配置文件package.json
npm init
继续在本地安装gulp
npm install –-save-dev gulp
安装完成后查看是否安装成功
gulp -v
安装成功,此时项目文件

三、安装gulp相关插件
1. 根目录下建立gulpfile.js文件
2. 执行任务(run-sequence)
npm 安装 run-sequence
npm install --save-dev run-sequence
3. 文件重命名(gulp-rename)
npm 安装 gulp-rename
npm install --save-dev gulp-rename
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), rename = require("gulp-rename"); //定义css源文件路径 var cssSrc = 'src/css/*.css'; // css文件重命名 gulp.task('rename', function () { return gulp.src(cssSrc) .pipe(rename({suffix:'.min'}))//将*.css 文件重命名为 *.min.css .pipe(gulp.dest('src/css')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['rename'], done); }); gulp.task('default', ['dev']);
4. css文件压缩(gulp-minify-css)
npm 安装 gulp-minify-css
npm install --save-dev gulp-minify-css
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), rename = require("gulp-rename"), minifyCss = require("gulp-minify-css"); //定义css源文件路径 var cssSrc = 'src/css/*.css'; // css文件压缩 gulp.task('minify-css', function () { return gulp.src([cssSrc,'!src/css/*.min.css']) // 要压缩的css文件 .pipe(rename({suffix:'.min'})) //重命名 .pipe(minifyCss()) //压缩css .pipe(gulp.dest('src/css')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['minify-css'], done); }); gulp.task('default', ['dev']);
5. js文件压缩(gulp-uglify)
npm 安装 gulp-uglify
npm install --save-dev gulp-uglify
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), rename = require("gulp-rename"), uglify = require("gulp-uglify"); //定义js源文件路径 var jsSrc = 'src/js/*.js'; //js文件压缩 gulp.task('minify-js', function () { return gulp.src([jsSrc,'!src/js/*.min.js']) .pipe(rename({suffix:'.min'})) .pipe(uglify()) //使用uglify进行压缩 .pipe(gulp.dest('src/js')); //压缩后的路径 }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['minify-js'], done); }); gulp.task('default', ['dev']);
5. css、js版本管理
npm 安装 gulp-rev、gulp-rev-collector
npm install --save-dev gulp-rev
npm install --save-dev gulp-rev-collector
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), rev = require('gulp-rev'), revCollector = require('gulp-rev-collector'); //定义css、js源文件路径 var cssSrc = 'src/css/*.css', jsSrc = 'src/js/*.js'; //CSS生成文件hash编码并生成 rev-manifest.json文件名对照映射 gulp.task('revCss', function(){ return gulp.src(cssSrc) .pipe(rev()) .pipe(rev.manifest()) .pipe(gulp.dest('src/css')); }); //js生成文件hash编码并生成 rev-manifest.json文件名对照映射 gulp.task('revJs', function(){ return gulp.src(jsSrc) .pipe(rev()) .pipe(rev.manifest()) .pipe(gulp.dest('src/js')); }); //Html替换css、js文件版本 gulp.task('revHtml', function () { return gulp.src(['src/**/*.json', 'src/*.html']) .pipe(revCollector()) .pipe(gulp.dest('src')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['revCss'], ['revJs'], ['revHtml'], done); }); gulp.task('default', ['dev']);
此时html文件如下

修改映射表中 属性值的格式
打开node_modules\gulp-rev\index.js
第133行 manifest[originalFile] = revisionedFile; 修改为: manifest[originalFile] = originalFile + '?v=' + file.revHash;
修改生成文件的文件名(原来是将 hash 值加入到文件名中,现要文件名保持不变):
打开node_modules\rev-path\index.js
第10行 return filename + '-' + hash + ext; 修改为: return filename + ext;
打开node_modules\gulp-rev-collector\index.js
第40行 let cleanReplacement = path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' ); 修改为:let cleanReplacement = path.basename(json[key]).split('?')[0];
//避免引用 URL 中的版本号累积 第163行 regexp: new RegExp( prefixDelim + pattern, 'g' ) 修改为: regexp: new RegExp( prefixDelim + pattern+'(\\?v=\\w{10})?', 'g' ),
6. 图片压缩(gulp-imagemin)
npm 安装 gulp-imagemin、imagemin-pngquant
npm install --save-dev gulp-imagemin
npm install --save-dev imagemin-pngquant
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), imagemin = require('gulp-imagemin'), pngquant = require('imagemin-pngquant'); //定义img源文件路径 var imgSrc = 'src/img/*'; gulp.task('minify-img', function () { return gulp.src(imgSrc) .pipe(imagemin({ progressive: true, use: [pngquant()] //使用pngquant来压缩png图片 })) .pipe(gulp.dest('src/img/')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['minify-img'], done); }); gulp.task('default', ['dev']);
7. 文件合并(gulp-concat)
npm 安装 gulp-concat
若安装报错则采用cnpm安装
cnpm install --save-dev gulp-concat
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), concat = require("gulp-concat"); // 合并文件 gulp.task('concat', function () { gulp.src('src/js/*.js') //要合并的文件 .pipe(concat('all.js')) // 合并匹配到的js文件并命名为 "all.js" .pipe(gulp.dest('src/js')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['concat'], done); }); gulp.task('default', ['dev']);
8. sass安装(gulp-sass)
npm 安装 gulp-sass后使用gulp会报错,我们采用淘宝 npm 镜像解决
安装cnpm
npm install -g cnpm –registry=https://registry.npm.taobao.org
cnpm 安装 gulp-sass
cnpm install --save-dev gulp-sass
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), rename = require("gulp-rename"), minifyCss = require("gulp-minify-css"), sass = require("gulp-sass"); //定义acss源文件路径 var sassSrc = 'src/css/*.scss'; // sass使用 gulp.task('compile-sass', function () { return gulp.src(sassSrc) .pipe(sass()) .pipe(rename({suffix:'.min'})) .pipe(minifyCss()) //压缩css .pipe(gulp.dest('src/css')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['compile-sass'], done); }); gulp.task('default', ['dev']);
9. 雪碧图制作(gulp.spritesmith)
npm 安装 gulp.spritesmith
npm install --save-dev gulp.spritesmith
编辑gulpfile.js
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), spritesmith=require('gulp.spritesmith'); // spritesmith使用 gulp.task('sprites', function () { return gulp.src('images/icon-*.png')//需要合并的图片地址 .pipe(spritesmith({ imgName:'css/icon.png', //保存合并后图片的地址 cssName:'css/icon.css',//保存合并后对于css样式的地址 padding:5,// 每个图片之间的间距,默认为0px cssTemplate:(data)=>{ // data为对象,保存合成前小图和合成打大图的信息包括小图在大图之中的信息 let arr = [], width = data.spritesheet.px.width, height = data.spritesheet.px.height, url = data.spritesheet.image arr.push( ".icon{display:inline-block;"+ "background: url('"+url+"');"+ "*display: inline;"+ "*zoom: 1;"+ "padding: 0;"+ "border: 0;"+ "background-repeat: no-repeat;"+ "}\n" ) data.sprites.forEach(function(sprite) { arr.push( "."+sprite.name+ "{"+ "background-position: "+ sprite.px.offset_x+" "+sprite.px.offset_y+";"+ "background-size: "+ width+" "+height+";"+ "width: "+sprite.px.width+";"+ "height: "+sprite.px.height+";"+ "}\n" ) }) return arr.join("") } })) .pipe(gulp.dest('css/')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['sprites'], done); }); gulp.task('default', ['dev']);
附上综合代码
//引入gulp和gulp插件 var gulp = require('gulp'), runSequence = require('run-sequence'), rev = require('gulp-rev'), revCollector = require('gulp-rev-collector'), uglify = require("gulp-uglify"), rename = require("gulp-rename"), minifyCss = require("gulp-minify-css"), imagemin = require('gulp-imagemin'), pngquant = require('imagemin-pngquant'), concat = require("gulp-concat"), sass = require("gulp-sass"), spritesmith = require("gulp.spritesmith"); //定义css、js源文件路径 var cssSrc = 'src/css/*.css', jsSrc = 'src/js/*.js', imgSrc = 'src/img/*', sassSrc = 'src/css/*.scss'; //CSS生成文件hash编码并生成 rev-manifest.json文件名对照映射 gulp.task('revCss', function(){ return gulp.src(cssSrc) .pipe(rev()) .pipe(rev.manifest()) .pipe(gulp.dest('src/css')); }); //js生成文件hash编码并生成 rev-manifest.json文件名对照映射 gulp.task('revJs', function(){ return gulp.src(jsSrc) .pipe(rev()) .pipe(rev.manifest()) .pipe(gulp.dest('src/js')); }); //Html替换css、js文件版本 gulp.task('revHtml', function () { return gulp.src(['src/**/*.json', 'src/*.html']) .pipe(revCollector()) .pipe(gulp.dest('src')); }); // css文件重命名 gulp.task('rename', function () { return gulp.src(cssSrc) .pipe(rename({suffix:'.min'}))//将*.css 文件重命名为 *.min.css .pipe(gulp.dest('src/css')); }); //js文件压缩 gulp.task('minify-js', function () { return gulp.src([jsSrc,'!src/js/*.min.js']) .pipe(rename({suffix:'.min'})) .pipe(uglify()) //使用uglify进行压缩,更多配置请参考: .pipe(gulp.dest('src/js')); //压缩后的路径 }); // css文件压缩 gulp.task('minify-css', function () { return gulp.src([cssSrc,'!src/css/*.min.css']) // 要压缩的css文件 .pipe(rename({suffix:'.min'})) .pipe(minifyCss()) //压缩css .pipe(gulp.dest('src/css')); }); //图片压缩 gulp.task('minify-img', function () { return gulp.src(imgSrc) .pipe(imagemin({ progressive: true, use: [pngquant()] //使用pngquant来压缩png图片 })) .pipe(gulp.dest('src/img/')); }); // 合并文件 gulp.task('concat', function () { return gulp.src('src/js/*.js') //要合并的文件 .pipe(concat('all.js')) // 合并匹配到的js文件并命名为 "all.js" .pipe(gulp.dest('src/js')); }); // sass使用 gulp.task('compile-sass', function () { return gulp.src(sassSrc) .pipe(sass()) .pipe(rename({suffix:'.min'})) .pipe(minifyCss()) //压缩css .pipe(gulp.dest('src/css')); }); // spritesmith使用 gulp.task('sprites', function () { return gulp.src('images/icon-*.png')//需要合并的图片地址 .pipe(spritesmith({ imgName:'css/icon.png', //保存合并后图片的地址 cssName:'css/icon.css',//保存合并后对于css样式的地址 padding:5,// 每个图片之间的间距,默认为0px cssTemplate:(data)=>{ // data为对象,保存合成前小图和合成打大图的信息包括小图在大图之中的信息 let arr = [], width = data.spritesheet.px.width, height = data.spritesheet.px.height, url = data.spritesheet.image // console.log(data) arr.push( ".icon{display:inline-block;"+ "background: url('"+url+"');"+ "*display: inline;"+ "*zoom: 1;"+ "padding: 0;"+ "border: 0;"+ "background-repeat: no-repeat;"+ "}\n" ) data.sprites.forEach(function(sprite) { arr.push( "."+sprite.name+ "{"+ "background-position: "+ sprite.px.offset_x+" "+sprite.px.offset_y+";"+ "background-size: "+ width+" "+height+";"+ "width: "+sprite.px.width+";"+ "height: "+sprite.px.height+";"+ "}\n" ) }) return arr.join("") } })) .pipe(gulp.dest('css/')); }); //开发构建 gulp.task('dev', function (done) { condition = false; runSequence( ['revCss'], ['revJs'], ['revHtml'], ['rename'], ['minify-js'], ['minify-css'], ['minify-img'], ['concat'], ['compile-sass'], ['sprites'], done); }); gulp.task('default', ['dev']);

浙公网安备 33010602011771号