gulp配置文件

本文档主要介绍如何配置和使用gulp,通过示例展示`package.json`和`gulpfile.js`的内容,来实现项目的自动化构建流程。

package.json:

{
  "name": "og-web20171010",
  "version": "1.0.0",
  "description": "20171010",
  "main": "gulpfile.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "tangcc",
  "license": "ISC",
  "devDependencies": {
    "browser-sync": "^2.18.13",
    "browsersync-ssi": "^0.2.4",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^4.0.0",
    "gulp-clean": "^0.3.2",
    "gulp-clean-css": "^3.9.0",
    "gulp-compass": "^2.1.0",
    "gulp-concat": "^2.6.1",
    "gulp-copy": "^1.0.1",
    "gulp-filter": "^5.0.1",
    "gulp-minify": "^1.0.0",
    "gulp-plumber": "^1.1.0",
    "gulp-rev": "^8.0.0",
    "gulp-rev-collector": "^1.2.2",
    "gulp-run-sequence": "^0.3.2",
    "gulp-sass": "^3.1.0",
    "gulp-sourcemaps": "^2.6.1",
    "gulp-uglify": "^3.0.0",
    "gulp-zip": "^4.0.0"
  }
}

gulpfile.js:

//使用严格模式的js。保证js的严谨,作为一个好习惯。
'use strict';
var appDir = './app';//源码目录
//var destDir = 'D:\\og_web-html\\src\\main\\webapp';//编译后目录
var destDir = "D:\\oghtml";//编译后目录

//var destDir = './dist';//编译后目录

var gulp = require("gulp"),
sourcemaps = require('gulp-sourcemaps');//映射文件

//多浏览器多设备同步&自动刷新
var browserSync = require("browser-sync").create(),
  SSI  =  require('browsersync-ssi'),
  filter  =  require('gulp-filter'),
  //用来编译sass
  sass  =  require('gulp-sass'),
  cssAutoprefixer = require('gulp-autoprefixer'),
  cleanCSS = require('gulp-clean-css'),//压缩css
  rev = require("gulp-rev"),
  revCollector=require('gulp-rev-collector'),
  // 需要ruby 不用了 compass = require('gulp-compass'),
  //合并文件
  concat = require('gulp-concat'),

  //混淆js压缩
  uglify = require('gulp-uglify'),
  //压缩js
  minify = require('gulp-minify'),

  //错误处理插件plumber
  plumber = require('gulp-plumber'),
  //clean 用来删除文件
  clean = require('gulp-clean'),
  //压缩文件
  zip = require('gulp-zip'),
  filesCopy = require("gulp-copy"), //可以把固定的文件复制到目标文件夹中去
  runSequence = require('gulp-run-sequence');

////////////////////////////////////////////////// server /////////////////////////////////////////////////////////////////////
//创建一个名为serve的任务,该任务的内容就是匿名函数中的内容。
gulp.task('serve', function() {


  browserSync.init({
    //files:['**'],
    //port:8080, // 指定访问服务器的端口号
    server: {
      baseDir:destDir
      // middleware:SSI({
      //   baseDir:destDir,// 设置静态服务器的根目录
      //   ext:'.shtml',
      //   version:'1.0',
      //   //index:'index.html' // 指定默认打开的文件
      // })
    }
  });

  //监听各个目录的文件,如果有变动则执行相应的任务操作文件
  gulp.watch("app/sass/**/*.scss", ['sass']);
  gulp.watch("app/js/**/*.js", ['js']);
  gulp.watch("app/css/**/*.css", ['css']);
  gulp.watch("app/lib/**/**.**", ['lib']);
  gulp.watch("app/iframe/**/*.html", ['iframe']);
  gulp.watch("app/img/**.**", ['img']);
  gulp.watch("app/html/**/*.html", ['html']);
  gulp.watch("app/index.html", ['index']);
  //如果有任何文件变动,自动刷新浏览器
  gulp.watch("app/**/*.html").on("change",browserSync.reload);
});

//监听各个目录的文件,如果有变动则执行相应的任务操作文件
gulp.watch("app/sass/**/*.scss", ['sass']);
gulp.watch("app/js/**/*.js", ['js']);
gulp.watch("app/css/**/*.css", ['css']);
gulp.watch("app/iframe/**/*.html", ['iframe']);
gulp.watch("app/img/**.**", ['img']);
gulp.watch("app/html/**/*.html", ['html']);
gulp.watch("app/index.html", ['index']);
gulp.watch("app/lib/**/**.**", ['lib']);
//如果有任何文件变动,自动刷新浏览器
gulp.watch("app/**/*.html").on("change",browserSync.reload);


// 代理的形式 proxy
// gulp.task('serve', function() {
//   //使用browserSync创建服务器,自动打开浏览器并打开./dist文件夹中的文件(默认为index.html)
//   browserSync.init({
//     proxy: "127.0.0.1:8080"
//   });
//   //监听各个目录的文件,如果有变动则执行相应的任务操作文件
//   gulp.watch("app/sass/**/*.scss", ['sass']);
//   gulp.watch("app/js/**/*.js", ['js']);
//   gulp.watch("app/css/**/*.css", ['css']);
//   gulp.watch("app/iframe/**/*.html", ['iframe']);
//   gulp.watch("app/img/**.**", ['img']);
//   gulp.watch("app/html/**/*.html", ['html']);
//   gulp.watch("app/index.html", ['index']);
//   gulp.watch("app/lib/**/**.**", ['lib']);
//   //如果有任何文件变动,自动刷新浏览器
//   gulp.watch("app/**/*.html").on("change",browserSync.reload);
// });


//下面来分别看看处理各个部分的任务:

//compass任务,将scss编译为css
gulp.task('sass', function() {
  //首先取得app/sass下的所有后缀为.scss的文件(**/的意思是包含所有子文件夹)
  return gulp.src('app/sass/**/*.scss')
    .pipe(sass({
      //设置生成sourcemap,在调试器中显示样式在scss文件中的位置,便于调试
      sourcemap: 'true',
      //输出格式设置为compressed就不需要压缩css了
      style: 'compressed',
      //文件目录
      css: 'app/css',
      sass: 'app/sass',
      image: 'app/img'
    }))
    //如果有错误输出错误提示
    .on('error', function(error) {
      // Would like to catch the error here
      console.log(error);
      this.emit('end');
    })
    .pipe(gulp.dest('app/css'))
    //自动刷新浏览器
    .pipe(browserSync.stream());
});

//css
gulp.task('css', function() {
  return gulp.src(["app/css/**/*.css"])
    .pipe(plumber())
    .pipe(gulp.dest(destDir+"/css"))
    .pipe(browserSync.stream());
});

//js任务,将js压缩后放入dist。该任务要在clean-scripts任务完成后再执行
gulp.task('js', function(){
  //首先取得app/javascript下的所有后缀为.js的文件(**/的意思是包含所有子文件夹)
  return gulp.src('app/js/**/*.js')
  //错误管理模块
    .pipe(plumber())
    //.pipe(uglify())
    //js压缩
    //.pipe(minify())
    .pipe(gulp.dest(destDir+"/js"))
    //自动刷新浏览器
    .pipe(browserSync.stream());
});


//html任务
gulp.task('html', function() {
  return gulp.src(["app/html/**/*.html"])
    .pipe(plumber())
    .pipe(gulp.dest(destDir + "/html"))
    .pipe(browserSync.stream());
});

//index.html任务
gulp.task('index', function() {
  return gulp.src(["app/index.html"])
    .pipe(plumber())
    .pipe(gulp.dest(destDir + "/"))
    .pipe(browserSync.stream());
});
//copy iframe任务
gulp.task('iframe', function() {
  return gulp.src("app/iframe/**/*.html")
    .pipe(plumber())
    .pipe(gulp.dest(destDir + "/iframe"))
    .pipe(browserSync.stream());
});
//copy img
gulp.task('img', function() {
  return gulp.src("app/img/**/*.*")
    .pipe(plumber())
    .pipe(gulp.dest(destDir + "/img"))
    .pipe(browserSync.stream());
});
//copy lib
gulp.task('lib', function() {
  return gulp.src("app/lib/**/*.*")
    .pipe(plumber())
    .pipe(gulp.dest(destDir+"/lib"))
    .pipe(browserSync.stream());
});


//clean任务:清空dist文件夹,下边重建dist的时候使用
gulp.task('clean', function () {
  return gulp.src( [destDir + '/*','!WEB-INF/**/*.*'] ,{read: false})
    .pipe(clean({force: true}));
});

//redist任务:需要时手动执行,重建dist文件夹:首先清空,然后重新处理所有文件
gulp.task('redist',function(){
  //先运行clean,然后并行运行html,js,compass
  runSequence('clean',['html','js','iframe','img','lib','index','css']);
});

//建立一个名为default的默认任务。当你在gitbash中执行gulp命令的时候,就会
gulp.task('default', function(){
  //先运行redist,再启动服务器
  runSequence('redist','serve');
});


////////////////////////////////////////////////// publish ///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////// publish ///////////////////////////////////////////////////////////////////


//创建一个名为publish serve的任务,该任务的内容就是匿名函数中的内容。
gulp.task('serve-release', function() {
  //使用browserSync创建服务器,自动打开浏览器并打开./dist文件夹中的文件(默认为index.html)
  browserSync.init({
    //files:['**'],
    //port:"8080", // 指定访问服务器的端口号
    server: {
      baseDir:destDir
      // middleware:SSI({
      //   baseDir:destDir,// 设置静态服务器的根目录
      //   ext:'.shtml',
      //   version:'1.0',
      //   //index:'index.html' // 指定默认打开的文件
      // })
    }
  });

  //监听各个目录的文件,如果有变动则执行相应的任务操作文件
  gulp.watch("app/sass/**/*.scss", ['sass-release']);
  gulp.watch("app/lib/**/**.**", ['lib-release']);
  gulp.watch("app/css/**/*.css", ['css-release']);
  gulp.watch("app/js/**/*.js", ['js-release']);
  gulp.watch("app/img/**.**", ['img-release']);
  gulp.watch("app/html/**/*.html", ['html-collector-release']);
  gulp.watch("app/iframe/**/*.html", ['iframe-collector-release']);
  gulp.watch("app/index.html", ['index-collector-release']);
  //如果有任何文件变动,自动刷新浏览器
  gulp.watch("app/**/*.html").on("change",browserSync.reload);
});

// 代理的形式 proxy
// gulp.task('serve', function() {
//   //使用browserSync创建服务器,自动打开浏览器并打开./dist文件夹中的文件(默认为index.html)
//   browserSync.init({
//     proxy: "127.0.0.1:8080"
//   });
//   //监听各个目录的文件,如果有变动则执行相应的任务操作文件
      //各种watch略
// });

//下面来分别看看处理各个部分的任务:
//compass任务,将scss编译为css
gulp.task('sass-release', function() {
  //首先取得app/sass下的所有后缀为.scss的文件(**/的意思是包含所有子文件夹)
  return gulp.src('app/sass/**/*.scss')
    .pipe(sass({
      //设置生成sourcemap,在调试器中显示样式在scss文件中的位置,便于调试
      sourcemap: 'true',
      //输出格式设置为compressed就不需要压缩css了
      style: 'compressed',
      //文件目录
      css: 'app/css',
      sass: 'app/sass',
      image: 'app/img'
    }))
    //如果有错误输出错误提示
    .on('error', function(error) {
      // Would like to catch the error here
      console.log(error);
      this.emit('end');
    })
    .pipe(gulp.dest('app/css'))
    //自动刷新浏览器
    .pipe(browserSync.stream());
});

//css-release
gulp.task('css-release', function() {
  return gulp.src(["app/css/**/*.css"])
    .pipe(plumber())
    .pipe(cssAutoprefixer())
    .pipe(cleanCSS())
    .pipe(rev())
    .pipe(gulp.dest(destDir + "/css"))
    .pipe(rev.manifest())
    .pipe(gulp.dest(appDir + '/revCssJson'));
});

//jsRev-release任务,将jsRev-release压缩后放入dist。该任务要在clean-scripts任务完成后再执行
gulp.task('js-release', function(){
  //首先取得app/javascript下的所有后缀为.js的文件(**/的意思是包含所有子文件夹)
  return gulp.src(['app/js/**/*.js'])
  //错误管理模块
    .pipe(plumber())
    .pipe(uglify())
    //js压缩
    .pipe(minify())
    .pipe(rev())
    .pipe(gulp.dest(destDir+"/js"))
    .pipe(rev.manifest())
    .pipe(gulp.dest(appDir + '/jsRevJson'));
});

gulp.task('img-release',function(){
  gulp.src([appDir + '/img/*'])
    .pipe(plumber())
    .pipe(rev())
    .pipe(gulp.dest(destDir + '/img'))
    .pipe(rev.manifest())
    .pipe(gulp.dest(appDir + '/imgRevJson'));
});

gulp.task('html-collector-release',function(){
  gulp.src([appDir + '/jsRevJson/*',appDir + '/revCssJson/*',appDir + '/imgRevJson/*',appDir+'/html/**/*.html'])
    .pipe(revCollector())
    .pipe(gulp.dest(destDir + '/html'));
})

gulp.task('iframe-collector-release',function(){
  gulp.src([appDir + '/jsRevJson/*',appDir + '/revCssJson/*',appDir + '/imgRevJson/*',appDir+'/iframe/**/*.html'])
    .pipe(revCollector())
    .pipe(gulp.dest(destDir + '/iframe'));
})

gulp.task('index-collector-release',function(){
  gulp.src([appDir + '/jsRevJson/*',appDir + '/revCssJson/*',appDir + '/imgRevJson/*',appDir + '/index.html'])
    .pipe(revCollector())
    .pipe(gulp.dest(destDir + '/'));
})

//copy lib
gulp.task('lib-release', function() {
  return gulp.src("app/lib/**/*.*")
    .pipe(plumber())
    .pipe(gulp.dest(destDir+"/lib"))
    .pipe(browserSync.stream());
});

//clean任务:清空dist文件夹,下边重建dist的时候使用
gulp.task('clean-release', function () {
  return gulp.src( [destDir + '/*','!WEB-INF/**/*.*'] ,{read: false})
    .pipe(clean({force: true}));
});

//redist任务:需要时手动执行,重建dist文件夹:首先清空,然后重新处理所有文件
gulp.task('redist-release',function(){
  //先运行clean,然后并行运行html,js,compass
  runSequence('clean-release',['sass-release','lib-release','css-release','js-release','img-release','html-collector-release','iframe-collector-release','index-collector-release']);
});

//建立一个名为default的默认任务。当你在gitbash中执行gulp命令的时候,就会
gulp.task('default-release', function(){
  //先运行redist,再启动服务器
  runSequence('redist-release','serve-release');
});



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值