Gulp脚本

kaosini 2019-06-27

var gulp = require('gulp');
// sass 插件

var sass = require('gulp-sass');

// 自动同步浏览器插件

var browserSync = require('browser-sync');

// 合并文件的插件

var useref = require('gulp-useref');

// 压缩js插件

var uglify = require('gulp-uglify');
var gulpIf = require('gulp-if');

// 压缩css插件

var cssnano = require('gulp-cssnano');

// 压缩图片插件

var imagemin = require('gulp-imagemin');

// 压缩png图片的插件

var pngquant = require('imagemin-pngquant');

// 缓存插件,可以加快编译速度

var cache = require('gulp-cache');

// 删除文件插件

var del = require('del');

// 同步运行任务插件

var runSequence = require('run-sequence');

// 给css3属性添加浏览器前缀插件

var autoprefixer = require('gulp-autoprefixer');
// sourcemap 插件
var sourcemaps = require('gulp-sourcemaps');
var lazypipe = require('lazypipe');

// 合成sprite图片插件

var spritesmith = require('gulp.spritesmith');
var imageminOptipng = require('imagemin-optipng');

// 编译sass文件,添加css3属性浏览器前缀,reload 浏览器

gulp.task('sass', function () {
 return gulp.src('./src/scss/**/*.scss')
     .pipe(sass())
     .pipe(autoprefixer())
     .pipe(gulp.dest('./src/css'))
     .pipe(browserSync.reload({stream: true}));
});

// 自动更新浏览器任务

gulp.task('browserSync', function () {
 browserSync.init({
     server: {
         baseDir: 'src'
     }
 })
});

// 合并文件任务
// 在html设置需要合并的文件:
// <!--build:js js/flexible.min.js -->
// <script src="js/flexible_css.js"></script>
// <script src="js/flexible.js"></script>
// <!-- endbuild-->
// 执行任务后,会编译成 : <script src="js/flexible.min.js"></script>
// 同时会把 flexible_css.js 和 flexible.js 合并成 flexible.min.js

gulp.task('useref', function () {
 return gulp.src('./src/*.html')
     .pipe(useref({}, lazypipe().pipe(sourcemaps.init, { loadMaps: true })))
     .pipe(gulpIf('*.js', uglify()))
     .pipe(gulpIf('*.css', cssnano()))
     .pipe(sourcemaps.write('maps'))
     .pipe(gulp.dest('dist'));
});

// 图片压缩任务

gulp.task('images', function () {
 return gulp.src('./src/img/**/*.+(png|jpg|gif|svg)')
     .pipe(imagemin({
         progressive: true,
         svgoPlugins: [{removeViewBox: false}],
         use: [pngquant()]
     }))
     .pipe(gulp.dest('dist/img'));
});

// 合并sprite图任务

gulp.task('sprite', function () {
 var spriteData = gulp.src('./src/img/sprite/**/*.png')
     .pipe(spritesmith({
         imgName: 'sprite.png',
         cssName: 'sprite.scss',
         imgPath: '../img/sprite/sprite.png',
         cssFormat: 'scss',
         padding: 10
     }));
 return spriteData.pipe(gulp.dest('./src/img/sprite/'))
});

// 删除build目录

gulp.task('clean:dist', function () {
 return del.sync('dist');
});

// 清除缓存

gulp.task('cache:clear', function (cb) {
 return cache.clearAll(cb)
});

// 监控任务,当有sass文件,html文件,js文件改动的时候,刷新浏览器

gulp.task('watch', ['browserSync', 'sass'], function () {
 gulp.watch('./src/scss/**/*.scss', ['sass']);
 gulp.watch('./src/*.html', browserSync.reload);
 gulp.watch('./src/js/**/*.js', browserSync.reload);
});

// 构建最终输出文件

gulp.task('build', function (callback) {
 runSequence('clean:dist', ['sass', 'useref', 'images', 'fonts'], callback);
});

// gulp 默认执行任务

gulp.task('default', function (callback) {
 runSequence(['sass', 'browserSync', 'watch'], callback);
});

相关推荐