这个方案主要是为了实现js/css/image的压缩合并、自动添加版本号、自动加浏览器前缀和压缩html。css
先把下面这里插件 npm i (插件名) -D 安装到项目环境内html
目录结构node
|- root
| |-dist //此目录为下面生成的
| |-css
| |-js
| |-images
| |-rev
| |-index.html
| |-node_modules
| |-src //资源目录
| |-css
| |-js
| |-images
| index.html
| gulpfile.js
| package.jsonnpm
gulpfile.js文件json
var gulp = require('gulp'), gulpSequence = require('gulp-sequence'), //同步执行任务 csso = require('gulp-csso'), //css压缩 jshint = require('gulp-jshint'), //js检查 uglify = require('gulp-uglify'), //js压缩 imageMin = require('gulp-imagemin'), //压缩图片 htmlMin = require('gulp-htmlmin'), //压缩html clean = require('gulp-clean'), //清空文件夹 rev = require('gulp-rev'), //更改版本名 md5后缀 autoFx = require('gulp-autoprefixer'), //加浏览器前缀 revCollector = require('gulp-rev-collector'); //gulp-rev 的插件,用于html模板更改引用路径 //清空文件夹 gulp.task('clean', function(){ return gulp.src('dist', {read:false}) .pipe(clean()); }); //压缩css/加浏览器前缀 gulp.task('css', function(){ return gulp.src('src/css/*.css') .pipe(autoFx({ browsers: ['last 2 versions', 'Android >= 4.0'] })) .pipe(csso()) .pipe(rev()) .pipe(gulp.dest('dist/css')) .pipe(rev.manifest()) .pipe(gulp.dest('dist/rev/css')); }); //压缩js gulp.task('js', function(){ return gulp.src('src/js/*.js') .pipe(uglify()) .pipe(rev()) .pipe(gulp.dest('dist/js')) .pipe(rev.manifest()) .pipe(gulp.dest('dist/rev/js')); }); //压缩image gulp.task('image', function(){ return gulp.src('src/images/*.{png,jpg,gif,ico}') .pipe(imageMin({ optimizationLevel: 5, progressive: true, interlaced: true, multipass: true })) .pipe(rev()) .pipe(gulp.dest('dist/images')) .pipe(rev.manifest()) .pipe(gulp.dest('dist/rev/images')); }); //改变css引用路径 gulp.task('revCss',function(){ return gulp.src(['dist/rev/**/*.json','dist/css/*.css']) .pipe(revCollector({ replaceReved: true })) .pipe(gulp.dest('dist/css')); }); //改变html引用路径 gulp.task('rev', function(){ return gulp.src(['dist/rev/**/*.json','src/*.html']) .pipe(revCollector({ replaceReved: true })) .pipe(htmlMin({collapseWhitespace: true})) .pipe(gulp.dest('dist/')); }); gulp.task('default', gulpSequence('clean', 'css', 'js', 'image', 'revCss', 'rev')); //按顺序执行任务
ok! 有问题,不懂的,错误,请你们积极留言!gulp