var gulp = require("gulp");
var connect = require("gulp-connect");

var minifyHtml = require("gulp-minify-html"); //压缩html

var rename = require("gulp-rename"); //重命名
var minifyCss = require("gulp-minify-css"); //压缩CSS
var autoprefixer = require("gulp-autoprefixer");
var scssToCss  = require("gulp-sass")(require('sass')); //scss to css

var clean = require("gulp-clean");

var fileinclude = require("gulp-file-include");


var babel = require('gulp-babel');
var webpack = require('webpack-stream');
var sourceMap = require('gulp-sourcemaps');
var webpackConfig = require ("./webpack/webpack.config.js");
// 创建
gulp.task("connect", function () {
  connect.server({
    root: "dist", //根目录
    livereload: true, //自动更新
    port: 9909, //端口
  });
});

gulp.task("fileinclude", function () {
  // 适配page中所有文件夹下的所有html，排除src下的tpl文件夹中html
  gulp
    .src(["src/*.html", "!src/tpl/**.html"])
    .pipe(
      fileinclude({
        prefix: "@@",
        basepath: "@file",
      })
    )
    .pipe(gulp.dest("dist"));
});
gulp.task("html", function () {
  return gulp
    .src("src/*.html")
    .pipe(fileinclude()) //替换头部底部
    .pipe(minifyHtml({quotes:true})) //执行压缩
    .pipe(gulp.dest("dist"))
    .pipe(connect.reload());
});
gulp.task("scss", function () {
  return gulp
  .src("src/static/scss/*.scss")
  .pipe(scssToCss())//编译scss
  .pipe(gulp.dest("src/static/css/"))
});
gulp.task("css", function () {
  return gulp
    .src("src/static/css/*.css")
    .pipe(autoprefixer("last 15 version", "ie 8"))
    .pipe(rename({ suffix: "" })) //rename压缩后的文件名
    .pipe(minifyCss()) //执行压缩
    .pipe(gulp.dest("dist/static/css/"))
    .pipe(connect.reload()); //更新;
});

// 清空dist文件夹
gulp.task("clean", function () {
  return gulp.src(["dist/*"]).pipe(clean());
});

gulp.task("watchs", function () {
  gulp.watch("src/*.html", gulp.series("html"));
  gulp.watch("src/tpl/*.html", gulp.series("html"));
  gulp.watch("src/static/scss/*.scss", gulp.series(
    "scss",
    gulp.parallel("css")
  ));
  gulp.watch("src/static/js/*.js", gulp.series("script"));
  gulp.watch("gulpfile.js", gulp.series("default"));
});



gulp.task('script', () => {
  return gulp.src('src/static/js/*.js')
  .pipe( sourceMap.init() )
  .pipe(babel({
    presets: ['@babel/preset-env']
  }))
  .pipe(webpack(webpackConfig))
  .pipe(sourceMap.write()) 
  .pipe(gulp.dest('dist/static/js/'))
  .pipe(connect.reload()); //更新;
  });

  gulp.task("lib", function () {
    return gulp
      .src("src/static/lib/*.js")
      .pipe(gulp.dest("dist/static/lib/"))
      .pipe(connect.reload()); //更新;
  });

  gulp.task("img", function () {
    return gulp
      .src("src/static/img/*")
      .pipe(gulp.dest("dist/static/img/"))
      .pipe(connect.reload()); //更新;
  });

gulp.task(
  "default",
  gulp.series(
    "clean",
    "scss",
    gulp.parallel("html","lib","script","img", "css"),
    gulp.parallel("connect", "watchs")
  )
);

gulp.task(
  "build",
  gulp.series(
    "clean",
    "scss",
    gulp.parallel("html","lib","script","img", "css")
  )
);
