当前位置 : 主页 > 网络编程 > JavaScript >

简易版gulpfile

来源:互联网 收集:自由互联 发布时间:2021-06-28
gulpfile.js const path = require('path');let gulp = require('gulp');let watch = require('gulp-watch');let ProxyMiddleware = require('http-proxy-middleware');let del = require('del')let connect = require('gulp-connect')let changed = require(
gulpfile.js
const path = require('path');
let gulp = require('gulp');

let watch = require('gulp-watch');
let ProxyMiddleware = require('http-proxy-middleware');
let del = require('del')
let connect = require('gulp-connect')
let changed = require('gulp-changed');
let gulpSequence = require('gulp-sequence').use(gulp)

// 文件处理
let autoprefixer = require('gulp-autoprefixer')
let htmlmin = require('gulp-htmlmin')

// 捕获异常
let plumber = require('gulp-plumber')

function resolve(fpath) {
    return path.join(__dirname, fpath);
}

// 目录
let app = {
  srcPath: resolve('src'),
  distRoot: resolve('dist'),
  devPath: resolve('dist/dev'),
  prdPath: resolve('dist/dist')
};

let exts = {
  html: 'html,htm',
  css: 'css',
  js: 'js',
};


/**
 * 生成随机端口
 */
function randomPort() {
  var port = parseInt(Math.random()*65535)
  if(port < 5000 || port === this.port) {
     port = randomPort.call(this);
  }

  return port;
}


let ProxyConf = {
   origin: ['/v1/**', '!/v1/**.*', '!/v1/'],
   target:  'https://xxx.xxx.com',
   host: 'http://localhost:8081'
};

/**
 * 生成代理列表
 * @param {*} ProxyConf cofnig
 */
function generationOps(ProxyConf) {
    let proxyTable = [];
    let ProxyOptions = {
        changeOrigin: true,
        logLevel: 'debug',
        ignorePath: true,
        router: function(req) {
            let origin = req.originalUrl;
            let target =  ProxyConf.target + origin;
            return target;
        },
        target: ProxyConf.host
    };

    proxyTable.push( ProxyMiddleware(ProxyConf.origin, ProxyOptions));
    return proxyTable;
}

 let proxyTable = generationOps(ProxyConf);

//  server config
let serverConfig = {
   root: app.devPath,
   port: 8081,
   livereload:{
       port: randomPort.call(this)
   },
   // proxy
   middleware: function(options,e) {
       return proxyTable;
   }
}

/**
 *  添加错误处理
 * @param {*} src
 */
function gulpPipe(src) {
    let stream = gulp.src(src)
    .pipe(plumber())

    return stream
}

/**
 *  流完成后reload
 */
function gulpTask() {

    let arg = [].splice.call(arguments, 0);
    if(typeof arg[arg.length -1] === 'function') {
        let cb = arg.pop();
        arg.push(function() {

           let stream = cb.call(this);
            return  stream.pipe(connect.reload());
        })
    };
    return  gulp.task.apply(gulp, arg);
}

// 清除文件
gulp.task('del', function() {
    // You can use multiple globbing patterns as you would with `gulp.src`
    try {
        return del.sync([app.distRoot])
    } catch (e) {
        console.log('删除失败')
        return gulp
    }
});

gulpTask('html', function() {
    let options = {
        removeComments: true, //清除HTML注释
        collapseWhitespace: true, //压缩HTML
        collapseBooleanAttributes: false, //省略布尔属性的值  ==> 
        removeEmptyAttributes: true, //删除所有空格作属性值  ==> 
        removeScriptTypeAttributes: false, //删除
网友评论