Glup的基本使用
1.作为当下前端构建系统,其核心高效易用,首先在一个空文件进行初始化—yarn init —yes
2.然后在安装gulp作为项目依赖进行安装,yarn add gulp —dev
3.在文件的根路劲下创建一个gulp的入口文件 (比如叫glupfile.js),在命令行终端中进行运行 yarn glup foo,
但是会报一个错误。(foo这个任务还没完成,不要忘记标识这个任务的结束,因为在最新gulp代码中它取消了 同步代码模式,约定每一个任务都是异步的任务,当我们每一个任务结束后必须给一个标识来标识这个任务的结束)
//gulp 的入口文件 glupfile.jsexports.foo=()=>{console.log('foo task working');}//err :The following tasks did not complete: foo// Did you forget to signal async completion?//解决 传入一个形式回调参数,来标识这个任务的结束exports.foo=done=>{console.log('foo task working');done();//标识任务完成}//默认任务 运行不需要函数名 直接 yarn gulpexports.default =done=>{console.log('defalut task working')done();}//gulp 4.0 以后 可以使用这种方式来创建一个任务,但是已经被废弃了,比较使用上面这种方式来创建任务const gulp =require('gulp');gulp.task('bar',done=>{console.log('bar task woring')done();})
glup的组合任务
//串行任务和并行任务const {series,parallel} = require("gulp")const task1 = done =>{setTimeout(()=>{console.log('task1 working')},1000)}const task2 = done =>{setTimeout(()=>{console.log('task2 working')},1000)}const task3 = done =>{setTimeout(()=>{console.log('task3 working')},1000)}//创建并行任务和并行任务的时候,在我们实际构建工作流的工程中例如我们编辑css和js 两个任务的时候 ,由于//两个任务是互不干扰的,我们可以使用并行任务来提高效率.我们部署任务,首先要执行编译任务,可以通过串行//(parallel)来执行//串行任务exports foo =series(task1,task2,task3)//并行任务exports bar = parallel(task1,task2,task3)
gulp的异步任务
//=====================================第一种====================================exports.callback =done=>{console.log('callback task')done();}//错误回调 如果多个任务同时执行的时候错误优先的原则,如果执行错误回调,其他的任务都会暂停exports.callback_error =done=>{console.log('callback task')done(new Error('task failled'))}// ==================================第二种====================================//注意 Promise.resolve() 不用传入任何参数 因为gulp会忽略掉exports.promise =() =>{console.log('promise task')return Promise.resolve()}exports.promise_error =() =>{console.log('promise task')return Promise.reject(new Error('task failed')) //后面的任务都会停止执行}// ===================================第三种==================================const timeout = time =>{return new Promise(resolve =>{setTimeout(resolve,time)})}exports.async = async()= >{await timeout(1000);console.log('async task')}// ===============================第四种================================exports.stream =() =>{const readStream =fs.createReadStream('package.json');const writeStream =fs.createWriteStream('temp.txt');readStream.pipe(writeStream)return readStream}exports.stream =done =>{const readStream =fs.createReadStream('package.json');const writeStream =fs.createWriteStream('temp.txt');readStream.pipe(writeStream)readStream.on('end',()=>{done()})}
Gulp 构建过程的核心工作原理
//这是node环境const fs =require('fs');const {Transform} =require('stream');export.default = () =>{//文件读取流const read =fs.createReadStream('normalize.css');//文件的写入流const write =fs.createWriteStream('normalize.min.css');//文件转换流const transform =new Transform({transform:(chunk,encoding,callback)=>{// 核心转换过程的实现// chunk => 读取流中读取到的内容const input = chunk.toString();const output = input.replace(/\s+/g,"").replace(/\/\*.+?\*\//g,'')callback(null,output)}})//把读取出来的文件流导入写入文件流read.pipe(transform) //转换.pipe(write) //写入return read}
Gulp 操作文件API
const {src, dest} =require('gulp');const cleanCss =require('gulp-clean-css')const rename = require('gulp-rename')exports.default =()=>{// src 可以理解成为读取流,后面接的是目标路劲//return src('src/normalize.css')//也可以使用通配符的方式return src('src/*.css')//同时构建过程就是文件的转换,可以安装一个插件,这个插件可以压缩css// 代码的转换 yarn add gulp-clean-css --dev 的方式安装这个插件.pipe(cleanCss())//如果你还想就行其他转换 就是对css 就行压缩,并重命名以.min.css为文件名 但是需要//yarn add gulp remane --dev.pipe(rename({{extname:'.min.css'}))// pipe 导出 dest写入流 后面接的是目标目录.pipe(dest('dest'))}
Gulp样式编译
const {src,dest} =require('gulp');const sass =requrie('gulp-sass')const style =()=>{//return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录//同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev.pipe(sass()).pipe(dest('dist'))}module.exports= {style}
gulp的脚步编译
const {src,dest} =require('gulp');const sass =requrie('gulp-sass')const babel =require('gulp-babel')const style =()=>{//return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录//同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev.pipe(sass()).pipe(dest('dist'))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev.pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'// 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev.pipe(dest('dist'))}module.exports= {style,script}
gulp页面模板的编译
const {src,dest,parallel} =require('gulp');const sass =requrie('gulp-sass')const babel =require('gulp-babel')const swig =require('gulp-swig')const style =()=>{//return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录//同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev.pipe(sass()).pipe(dest('dist'))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev.pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'// 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev.pipe(dest('dist'))}const page =()=>{return src('src/*.html',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev.pipe(swig()).pipe(dest('dist'))}const compile = parallel(style,script,page)module.exports= {compile}
图片和字体文件转换
const {src,dest,parallel} =require('gulp');const sass =requrie('gulp-sass')const babel =require('gulp-babel')const swig =require('gulp-swig')const style =()=>{//return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录//同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev.pipe(sass()).pipe(dest('dist'))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev.pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'// 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev.pipe(dest('dist'))}const page =()=>{return src('src/*.html',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev.pipe(swig()).pipe(dest('dist'))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev.pipe(imagemin()).pipe(dest('dest'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev.pipe(imagemin()).pipe(dest('dist'))}const compile = parallel(style,script,page,font,imgage)module.exports= {compile,}
其他文件及其他文件的清除
const {src,dest,parallel,series} =require('gulp');const sass =requrie('gulp-sass')const babel =require('gulp-babel')const swig =require('gulp-swig')const del =require('del') //这里需要安装 del 可以在gulp 那里使用 yarn add del --devconst style =()=>{//return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录//同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev.pipe(sass()).pipe(dest('dist'))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev.pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'// 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev.pipe(dest('dist'))}const page =()=>{return src('src/*.html',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev.pipe(swig()).pipe(dest('dist'))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev.pipe(imagemin()).pipe(dest('dist'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev.pipe(imagemin()).pipe(dest('dist'))}// 其他的文件const extra =()=>{return src('public/**',{base:'public'}) //.pipe(dest('dist'))}const clean = ()=>{return del(['dist'])}const compile = parallel(style,script,page,font,imgage);const build =series(clean,parallel(compile,extra))module.exports= {compile,build}
自动加载插件
const {src,dest,parallel,series} =require('gulp');const del =require('del') //这里需要安装 del 可以在gulp 那里使用 yarn add del --devconst loadPlugins =require('gulp-load-plugins');const plugins =loadPlugins()const style =()=>{//return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录//同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev.pipe(sass()).pipe(dest('dist'))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev.pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'// 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev.pipe(dest('dist'))}const page =()=>{return src('src/*.html',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev.pipe(plugins.swig()).pipe(dest('dist'))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev.pipe(plugins.imagemin()).pipe(dest('dist'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}) ////同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev.pipe(plugins.imagemin()).pipe(dest('dist'))}// 其他的文件const extra =()=>{return src('public/**',{base:'public'}) //.pipe(dest('dist'))}const clean = ()=>{return del(['dist'])}const compile = parallel(style,script,page,font,imgage);const build =series(clean,parallel(compile,extra))module.exports= {compile,build}
Gulp的热更新
//1.首先 安装yarn add browser-sync --dev 这个模块const {src,dest,parallel,series} =require('gulp');//然后单独引入这个模块const browserSync =require('browser-sync')const del =require('del')const loadPlugins =require('gulp-load-plugins');const plugins =loadPlugins();//创建一个开发服务器const bs = browserSync.create();const style =()=>{//return src('src/assets/style/*.scss')return src('src/assets/style/*.scss',{base:'src'}).pipe(sass()).pipe(dest('dist'))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) //.pipe(babel({presets:['@babel/preset-env']})).pipe(dest('dist'))}const page =()=>{return src('src/*.html',{base:'src'}) //.pipe(plugins.swig()).pipe(dest('dist'))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) //.pipe(plugins.imagemin()).pipe(dest('dist'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}).pipe(plugins.imagemin()).pipe(dest('dist'))}// 其他的文件const extra =()=>{return src('public/**',{base:'public'}) //.pipe(dest('dist'))}const clean = ()=>{return del(['dist'])}const serve =() =>{bs.init({notify:false, // 关闭提示(xxxx is not connet)port:2080,open:false, //是否自动打开浏览器files:'dist/**', //当dist 改变的时候页面自动改变server:{//baseDir 指的是网站的根目录baseDir:'dist',//routes这个优先级比baseDir还有高routes:{'_node/modules':'node_modules'}}})}const compile = parallel(style,script,page,font,imgage);const build =series(clean,parallel(compile,extra))module.exports= {compile,serve,build}
监听变化以及构建优化
const {src,dest,parallel,series,watch} =require('gulp');const browserSync =require('browser-sync')const del =require('del')const loadPlugins =require('gulp-load-plugins');const plugins =loadPlugins();const bs = browserSync.create();const style =()=>{//return src('src/assets/style/*.scss')return src('src/assets/style/*.scss',{base:'src'}).pipe(sass()).pipe(dest('dist')).pipe(bs.reload({stream:true}))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) //.pipe(babel({presets:['@babel/preset-env']})).pipe(dest('dist')).pipe(bs.reload({stream:true}))}const page =()=>{return src('src/*.html',{base:'src'}) //.pipe(plugins.swig()).pipe(dest('dist')).pipe(bs.reload({stream:true}))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) //.pipe(plugins.imagemin()).pipe(dest('dist'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}).pipe(plugins.imagemin()).pipe(dest('dist'))}// 其他的文件const extra =()=>{return src('public/**',{base:'public'}) //.pipe(dest('dist'))}const clean = ()=>{return del(['dist'])}const serve =() =>{watch('src/assets/style/*.scss',style)watch('src/assets/style/*.js',script)watch('src/*.html',page)watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)//watch('src/assets/image/**',imgage)//watch('src/assets/font/**',font)//watch('public/**',extra)bs.init({notify:false,port:2080,open:false,//files:'dist/**',server:{baseDir:['dist','src','public'],routes:{'_node/modules':'node_modules'}}})}const compile = parallel(style,script,page);const build =series(clean,parallel(compile,font,imgage,extra))const develop =series(compile,serve)module.exports= {clean,compile,serve,develop}
useref文件引用处理
//安装useref yarn add useref --devconst {src,dest,parallel,series,watch} =require('gulp');const browserSync =require('browser-sync')const del =require('del')const loadPlugins =require('gulp-load-plugins');const plugins =loadPlugins();const bs = browserSync.create();const style =()=>{//return src('src/assets/style/*.scss')return src('src/assets/style/*.scss',{base:'src'}).pipe(sass()).pipe(dest('dist')).pipe(bs.reload({stream:true}))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) //.pipe(babel({presets:['@babel/preset-env']})).pipe(dest('dist')).pipe(bs.reload({stream:true}))}const page =()=>{return src('src/*.html',{base:'src'}) //.pipe(plugins.swig()).pipe(dest('dist')).pipe(bs.reload({stream:true}))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) //.pipe(plugins.imagemin()).pipe(dest('dist'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}).pipe(plugins.imagemin()).pipe(dest('dist'))}// 其他的文件const extra =()=>{return src('public/**',{base:'public'}) //.pipe(dest('dist'))}const clean = ()=>{return del(['dist'])}const serve =() =>{watch('src/assets/style/*.scss',style)watch('src/assets/style/*.js',script)watch('src/*.html',page)watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)//watch('src/assets/image/**',imgage)//watch('src/assets/font/**',font)//watch('public/**',extra)bs.init({notify:false,port:2080,open:false,//files:'dist/**',server:{baseDir:['dist','src','public'],routes:{'_node/modules':'node_modules'}}})}const useref=() =>{return src('dist/*.html',{base:'dist'}).pipe(plugins.useref({searchPath:['dist','.']}))// 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev//对三种不同文件不同的操作 需要 yarn add gulp-if --dev.pipe(plugins.if(/\.js$/,plugins.uglify()))//压缩css.pipe(plugins.if(/\.css$/,plugins.cleanCss()))//压缩html.pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true}))).pipe(dest('release'))}const compile = parallel(style,script,page);const build =series(clean,parallel(compile,font,imgage,extra))const develop =series(compile,serve)module.exports= {clean,compile,serve,develop}
重新规划构建过程
//安装useref yarn add useref --devconst {src,dest,parallel,series,watch} =require('gulp');const browserSync =require('browser-sync')const del =require('del')const loadPlugins =require('gulp-load-plugins');const plugins =loadPlugins();const bs = browserSync.create();const style =()=>{//return src('src/assets/style/*.scss')return src('src/assets/style/*.scss',{base:'src'}).pipe(sass()).pipe(dest('temp')).pipe(bs.reload({stream:true}))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) //.pipe(babel({presets:['@babel/preset-env']})).pipe(dest('temp')).pipe(bs.reload({stream:true}))}const page =()=>{return src('src/*.html',{base:'src'}) //.pipe(plugins.swig()).pipe(dest('temp')).pipe(bs.reload({stream:true}))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) //.pipe(plugins.imagemin()).pipe(dest('dist'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}).pipe(plugins.imagemin()).pipe(dest('dist'))}// 其他的文件const extra =()=>{return src('public/**',{base:'public'}) //.pipe(dest('dist'))}const clean = ()=>{return del(['dist','temp'])}const serve =() =>{watch('src/assets/style/*.scss',style)watch('src/assets/style/*.js',script)watch('src/*.html',page)watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)//watch('src/assets/image/**',imgage)//watch('src/assets/font/**',font)//watch('public/**',extra)bs.init({notify:false,port:2080,open:false,//files:'dist/**',server:{baseDir:['temp','src','public'],routes:{'_node/modules':'node_modules'}}})}const useref=() =>{return src('temp/*.html',{base:'dist'}).pipe(plugins.useref({searchPath:['dist','.']}))// 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev//对三种不同文件不同的操作 需要 yarn add gulp-if --dev.pipe(plugins.if(/\.js$/,plugins.uglify()))//压缩css.pipe(plugins.if(/\.css$/,plugins.cleanCss()))//压缩html.pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true}))).pipe(dest('dist'))}const compile = parallel(style,script,page);const build =series(clean,parallel(series(compile,useref),font,imgage,extra))const develop =series(compile,serve)module.exports= {clean,compile,serve,develop}
gulp的补充
//安装useref yarn add useref --devconst {src,dest,parallel,series,watch} =require('gulp');const browserSync =require('browser-sync')const del =require('del')const loadPlugins =require('gulp-load-plugins');const plugins =loadPlugins();const bs = browserSync.create();const style =()=>{//return src('src/assets/style/*.scss')return src('src/assets/style/*.scss',{base:'src'}).pipe(sass()).pipe(dest('temp')).pipe(bs.reload({stream:true}))}const script =()=>{return src('src/assets/style/*.js',{base:'src'}) //.pipe(babel({presets:['@babel/preset-env']})).pipe(dest('temp')).pipe(bs.reload({stream:true}))}const page =()=>{return src('src/*.html',{base:'src'}) //.pipe(plugins.swig()).pipe(dest('temp')).pipe(bs.reload({stream:true}))}const imgage =()=>{return src('src/assets/image/**',{base:'src'}) //.pipe(plugins.imagemin()).pipe(dest('dist'))}//字体文件const font =()=>{return src('src/assets/font/**',{base:'src'}).pipe(plugins.imagemin()).pipe(dest('dist'))}// 其他的文件const extra =()=>{return src('public/**',{base:'public'}) //.pipe(dest('dist'))}const clean = ()=>{return del(['dist','temp'])}const serve =() =>{watch('src/assets/style/*.scss',style)watch('src/assets/style/*.js',script)watch('src/*.html',page)watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)//watch('src/assets/image/**',imgage)//watch('src/assets/font/**',font)//watch('public/**',extra)bs.init({notify:false,port:2080,open:false,//files:'dist/**',server:{baseDir:['temp','src','public'],routes:{'_node/modules':'node_modules'}}})}const useref=() =>{return src('temp/*.html',{base:'dist'}).pipe(plugins.useref({searchPath:['dist','.']}))// 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev//对三种不同文件不同的操作 需要 yarn add gulp-if --dev.pipe(plugins.if(/\.js$/,plugins.uglify()))//压缩css.pipe(plugins.if(/\.css$/,plugins.cleanCss()))//压缩html.pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true}))).pipe(dest('dist'))}const compile = parallel(style,script,page);const build =series(clean,parallel(series(compile,useref),font,imgage,extra))const develop =series(compile,serve)module.exports= {clean,build,develop}
封装工作流
//安装useref yarn add useref --devconst {src,dest,parallel,series,watch} =require('gulp');const browserSync =require('browser-sync')const del =require('del')const loadPlugins =require('gulp-load-plugins');const plugins =loadPlugins();const bs = browserSync.create();const cwd = process.cwd();let config ={build:{src:'scr',dist:'dist',temp:'temp',public:'public',paths:{styles:'assets/style/*.scss',script:'assets/style/*.js',page:'*.html',image:'assets/image/**',font:'assets/font/**',}}}try{const loadConfig =require(`${cwd}\pages.config.js`)congif =Object.assign({},config,loadConfig)}const style =()=>{//return src('src/assets/style/*.scss')return src(config.build.paths.styles,{base:config.bulid.src,cwd:config.bulid.src}).pipe(sass({outputStyle:'expanded'})).pipe(dest(config.build.temp)).pipe(bs.reload({stream:true}))}const script =()=>{return src(config.build.paths.script,{base:config.bulid.src,cwd:config.bulid.src}).pipe(babel({presets:[require('@babel/preset-env')]})).pipe(dest(config.build.temp)).pipe(bs.reload({stream:true}))}const page =()=>{return src(config.build.paths.page,{base:config.bulid.src,cwd:config.bulid.src}) //.pipe(plugins.swig({data:config.data})).pipe(dest(config.build.temp)).pipe(bs.reload({stream:true}))}const imgage =()=>{return src(config.build.paths.imgage,{base:config.bulid.src,cwd:config.bulid.src}) //.pipe(plugins.imagemin()).pipe(dest(config.build.dist))}//字体文件const font =()=>{return src(config.build.paths.font,{base:config.bulid.src,cwd:config.bulid.src}).pipe(plugins.imagemin()).pipe(dest(config.build.dist))}// 其他的文件const extra =()=>{return src('**',{base:config.bulid.public,cwd:config.bulid.public}) //.pipe(dest(config.build.dist))}const clean = ()=>{return del([config.bulid.dist,config.bulid.temp])}const serve =() =>{watch(config.build.paths.styles,{cwd:config.bulid.src},style)watch(config.build.paths.script,{cwd:config.bulid.src},script)watch(config.build.paths.page,{cwd:config.bulid.src},page)watch([config.build.paths.image,config.build.paths.font], {cwd:config.build.src},bs.reload)watch('**',{cwd:config.build.public},bs.reload)//watch('src/assets/image/**',imgage)//watch('src/assets/font/**',font)//watch('public/**',extra)bs.init({notify:false,port:2080,open:false,//files:'dist/**',server:{baseDir:[config.build.temp,config.build.src,config.build.public],routes:{'_node/modules':'node_modules'}}})}const useref=() =>{return src(config.build.paths.page,{base:config.build.temp,cwd:config.bulid.src}).pipe(plugins.useref({searchPath:[config.build.temp,'.']}))// 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev//对三种不同文件不同的操作 需要 yarn add gulp-if --dev.pipe(plugins.if(/\.js$/,plugins.uglify()))//压缩css.pipe(plugins.if(/\.css$/,plugins.cleanCss()))//压缩html.pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true}))).pipe(dest(config.build.dist))}const compile = parallel(style,script,page);const build =series(clean,parallel(series(compile,useref),font,imgage,extra))const develop =series(compile,serve)module.exports= {clean,build,develop}
