gulp构建整理

gulp构建工具

1、dev版  js检测+混淆、sass编译+压缩、HTML模块编译+压缩、图片压缩、版本管理等

2、build版本 监控+HTML模块化+js合并+server启动


gulpfile.js如下:
var gulp = require('gulp'),
    runSequence = require('run-sequence'),
    browserSync = require('browser-sync').create(),
    gulpif = require('gulp-if'),
    uglify = require('gulp-uglify'),
    sass = require('gulp-sass'),
    csslint = require('gulp-csslint'),
    rev = require('gulp-rev'),
    minifyCss = require('gulp-minify-css'),
    jshint = require('gulp-jshint'),
    stylish = require('jshint-stylish'),
    revCollector = require('gulp-rev-collector'),
    minifyHtml = require('gulp-minify-html'),
    autoprefixer = require('gulp-autoprefixer'),
    concat = require('gulp-concat'),
    httpProxy = require('http-proxy'),
    imagemin = require('gulp-imagemin'),
    pngquant = require('imagemin-pngquant'),
    imageminJpegtran = require('imagemin-jpegtran'),
    fileinclude = require('gulp-file-include');
var proxy = httpProxy.createProxyServer({});

var condition = true;

// 压缩图片
gulp.task('imagemin', () => {
    return gulp.src('dist/static/images/*')
        .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{
                removeViewBox: false
            }],
            use: [pngquant()]
        }))
        .pipe(imageminJpegtran({
            progressive: true
        })())
        .pipe(gulp.dest('dist/static/images'));
});


//检测CSS并sass
gulp.task('lintCss', function(){
    return gulp.src('src/static/sass/*.scss')
        // .pipe(csslint())
        // .pipe(csslint.reporter())
        // .pipe(csslint.failReporter())
        .pipe(sass())
        .pipe(gulp.dest('src/static/css'));
});

//检测JS
gulp.task('lintJs', function(){
    return gulp.src('src/static/js/*.js')
        //.pipe(jscs())   //检测JS风格
        .pipe(jshint({
            "undef": false,
            "unused": false
        }))
        //.pipe(jshint.reporter('default'))  //错误默认提示
        .pipe(jshint.reporter(stylish))   //高亮提示
        .pipe(jshint.reporter('fail'));
});

// 生成版本号
gulp.task('rev' , function(){
    return gulp.src(['src/static/*(css|doc|images|js|json)/*.*' , 'src/static/*(images|ueditor)/**/*.*'])
        .pipe(rev())
        .pipe(gulp.dest('dist/static'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('src/static/rev/all'));
});


// 压缩js并替换版本号
gulp.task('miniJs', function(){
    return gulp.src(['src/static/rev/**/*.json', 'dist/static/js/*.js'])
        .pipe(gulpif(
            condition, revCollector()
        ))
        .pipe(gulpif(
            condition, uglify()
        ))
        .pipe(gulp.dest('dist/static/js'));
});


// 压缩css并替换版本号
gulp.task('miniCss', function(){
    return gulp.src(['src/static/rev/**/*.json', 'dist/static/css/*.css'])
        .pipe(gulpif(
            condition, revCollector()
        ))
        .pipe(gulpif(
            condition, minifyCss({
                compatibility: 'ie7'
            })
        ))
        .pipe(autoprefixer({
            browsers: ['last 2 versions'],
            cascade: false,
            remove: false       
        }))
        .pipe(gulp.dest('dist/static/css'));
});


//压缩Html/更新引入文件版本
gulp.task('miniHtml', function () {
    return gulp.src(['src/static/rev/**/*.json', 'dist/*.html'])
        .pipe(gulpif(
            condition, revCollector()
        ))
        .pipe(gulpif(
            condition, minifyHtml({
                empty: true,
                spare: true,
                quotes: true
            })
        ))
        .pipe(gulp.dest('dist'));
});

gulp.task('fileinclude', function() {
    return gulp.src(['src/*.html'])
        .pipe(fileinclude({
          prefix: '@@',
          basepath: '@file'
        }))
        .pipe(rev())
        .pipe(gulp.dest('dist'))
        .pipe(rev.manifest())
        .pipe(gulp.dest('src/static/rev/html'));
});

gulp.task('vendor', function() {
  return gulp.src([
      'src/static/vendor/jquery.min.js',
      'src/static/vendor/knockout.js',
      'src/static/vendor/knockout.viewmodel.min.js',
    ])
    .pipe(concat('vendor.js'))
    .pipe(gulp.dest('dist/static/js/'))
});

// Static server
gulp.task('browser-init', function() {
  browserSync.init({
    server: {
      baseDir: "dist",
    },
    port: "6789"
  });
});

gulp.task('watch', function() {
  gulp.watch("src/static/sass/*.*").on("change", function(callback) {
    runSequence(['lintCss'], ['rev'] ,function() {
      browserSync.reload();
    });

  });
  gulp.watch("src/static/js/*.*").on("change", function(callback) {
    runSequence('rev' ,  function() {
      browserSync.reload();
    });
  });
  gulp.watch("src/*.html").on("change", function(callback) {
    runSequence( 'fileinclude' ,  function() {
      browserSync.reload();
    });
  });
});

//开发构建
gulp.task('dev', function (done) {
    condition = false;
    runSequence(
         ['watch' , 'lintCss' , 'fileinclude'],
         ['vendor'],
         ['rev'],
         ['browser-init'],
    done);
});

gulp.task('build', function (done) {
    runSequence(
         ['lintCss' , 'lintJs' , 'fileinclude'],
         ['vendor'],
         ['rev'],
         ['miniCss', 'miniJs' , 'miniHtml' , 'imagemin'],
    done);
});



gulp.task('default', ['build']);

package.json如下:
{
  "name": "qinghuanweier",
  "version": "1.0.0",
  "description": "qinghuanweier",
  "main": "index.js",
  "private": true,
  "dependencies": {
    "gulp": "^3.9.1"
  },
  "devDependencies": {
    "browser-sync": "^2.11.1",
    "gulp": "^3.9.1",
    "gulp-concat": "^2.6.0",
    "gulp-file-include": "^0.13.7",
    "gulp-sass": "^2.2.0",
    "http-proxy": "^1.13.2",
    "glob": "^5.0.5",
    "gulp-autoprefixer": "^2.1.0",
    "gulp-csslint": "^0.1.5",
    "gulp-if": "^1.2.5",
    "gulp-jshint": "^1.11.2",
    "gulp-minify-css": "^1.2.0",
    "gulp-minify-html": "^1.0.4",
    "gulp-rev": "^5.1.0",
    "gulp-rev-collector": "^1.0.0",
    "gulp-uglify": "^1.2.0",
    "gulp-util": "^3.0.6",
    "jquery": "1.11.3",
    "jshint": "^2.8.0",
    "jshint-stylish": "^2.0.1",
    "run-sequence": "^1.0.2",
    "gulp-imagemin": "^2.4.0",
    "imagemin-jpegtran": "^4.3.2",
    "imagemin-pngquant": "^4.2.2"
  },
  "repository": {
    "type": "git",
    "url": ""
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "license": "ISC"
}

目录结构如下:


参考:https://github.com/shonny-ua/gulp-rev-collector

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值