一个构gulp自动化构建工作流案例
须要对款式文件,js文件,html文件,图片字体文件,其余额定文件顺次构建工作,并在此过程中实现对文件的压缩合并

const {    src,    dest,    series,    parallel,    watch,} = require('gulp');const loadPlugins = require('gulp-load-plugins')const plugins = loadPlugins() // 加载插件模块const sass = require('gulp-sass')(require('sass'));// sass.compiler = require("node-sass");// const plugins.babel = require('gulp-babel')// const plugins.swig = require('gulp-swig')// const plugins.imagemin = require('gulp-imagemin')const del = require('del') // 革除文件插件const browserSync = require('browser-sync') // 提供一个能够热更新的开发服务器const bs = browserSync.create() // 创立一个开发服务器const data = `your template data`// 清理dist文件夹const clean = () => {    return del(['dist', 'temp'])}const style = () => {    // base参数保留了src目录前面的基准门路    return src('src/assets/styles/*.scss', {            base: 'src'        })        .pipe(sass({            outputStyle: 'expanded'        })) // 齐全开展        .pipe(dest('temp')) // 放到长期目录        .pipe(bs.reload({            stream: true        })) // 外部文件流信息推到浏览器}const script = () => {    return src('src/assets/scripts/*.js', {            base: 'src'        })        .pipe(plugins.babel({            presets: ['@babel/preset-env'] // 蕴含了最新的js语法        }))        .pipe(dest('temp'))        .pipe(bs.reload({            stream: true        }))}const page = () => {    return src('src/**/*.html', {            base: 'src'        }) // **代表了src目录下任意html文件        .pipe(plugins.swig({            data, // 动态数据模板编译输入            defaults: {                cache: false // 避免模板缓存导致页面不能及时更新            }        }))        .pipe(dest('temp'))        .pipe(bs.reload({            stream: true        }))}const image = () => {    return src('src/assets/images/**', {            base: 'src'        })        .pipe(plugins.imagemin())        .pipe(dest('dist'))}const font = () => {    return src('src/assets/fonts/**', {            base: 'src'        })        .pipe(plugins.imagemin())        .pipe(dest('dist'))}const extra = () => { // 拷贝额定文件    return src('public/**', {            base: 'public'        })        .pipe(dest('dist'))}const server = () => {    watch('src/assets/styles/*.scss', style)    watch('src/assets/scripts/*.js', script)    watch('src/*.html', page)    // 上面三个工作,只须要上线的时候公布进来即可,开发阶段的构建须要缩小构建,进步构建效率    // watch('src/assets/image/**', image)      // watch('src/assets/fonts/**', font)    // watch('public/**', extra)    watch([        'src/assets/images/**',        'src/assets/fonts/**',        'public/**'    ], bs.reload)    bs.init({        notify: false,        port: 2180,        // files: 'dist/**', // 监听文件夹  srcipt,style,page因为bs.realod,这里不必再监听        // open: false, // 勾销关上浏览器        server: {            baseDir: ['temp', 'src', 'public'], // 服务器运行根目录,数组内为顺次寻找目录            routes: {                '/node_modules': 'node_modules'            }        }    })}const useref = () => {    return src('temp/*.html', {            base: 'temp'        })        .pipe(plugins.useref({            searchPath: ['temp', '.']        })) // 解决构建正文,合并到一个文件中        // 压缩html,js,css        .pipe(plugins.if(/\.js$/, plugins.uglify()))        .pipe(plugins.if(/\.css$/, plugins.cleanCss()))        .pipe(plugins.if(/\.html$/, plugins.htmlmin({            collapseWhitespace: true, // 解决html文件空格            minifyCSS: true,            minifyJS: true        })))        .pipe(dest('release'))}const compile = parallel(style, script, page) // 并行执行三个工作,组合为一个compile工作// build之前执行clean工作,上线之前执行buildconst build = series(clean, parallel(series(compile, useref), image, font, extra));const develop = series(compile, server)module.exports = {    build,    clean,    develop,}