Glup的基本使用

1.作为当下前端构建系统,其核心高效易用,首先在一个空文件进行初始化—yarn init —yes
2.然后在安装gulp作为项目依赖进行安装,yarn add gulp —dev
3.在文件的根路劲下创建一个gulp的入口文件 (比如叫glupfile.js),在命令行终端中进行运行 yarn glup foo,
但是会报一个错误。(foo这个任务还没完成,不要忘记标识这个任务的结束,因为在最新gulp代码中它取消了 同步代码模式,约定每一个任务都是异步的任务,当我们每一个任务结束后必须给一个标识来标识这个任务的结束)

  1. //gulp 的入口文件 glupfile.js
  2. exports.foo=()=>{
  3. console.log('foo task working');
  4. }
  5. //err :The following tasks did not complete: foo
  6. // Did you forget to signal async completion?
  7. //解决 传入一个形式回调参数,来标识这个任务的结束
  8. exports.foo=done=>{
  9. console.log('foo task working');
  10. done();//标识任务完成
  11. }
  12. //默认任务 运行不需要函数名 直接 yarn gulp
  13. exports.default =done=>{
  14. console.log('defalut task working')
  15. done();
  16. }
  17. //gulp 4.0 以后 可以使用这种方式来创建一个任务,但是已经被废弃了,比较使用上面这种方式来创建任务
  18. const gulp =require('gulp');
  19. gulp.task('bar',done=>{
  20. console.log('bar task woring')
  21. done();
  22. })

glup的组合任务

  1. //串行任务和并行任务
  2. const {series,parallel} = require("gulp")
  3. const task1 = done =>{
  4. setTimeout(()=>{
  5. console.log('task1 working')
  6. },1000)
  7. }
  8. const task2 = done =>{
  9. setTimeout(()=>{
  10. console.log('task2 working')
  11. },1000)
  12. }
  13. const task3 = done =>{
  14. setTimeout(()=>{
  15. console.log('task3 working')
  16. },1000)
  17. }
  18. //创建并行任务和并行任务的时候,在我们实际构建工作流的工程中例如我们编辑css和js 两个任务的时候 ,由于
  19. //两个任务是互不干扰的,我们可以使用并行任务来提高效率.我们部署任务,首先要执行编译任务,可以通过串行
  20. //(parallel)来执行
  21. //串行任务
  22. exports foo =series(task1,task2,task3)
  23. //并行任务
  24. exports bar = parallel(task1,task2,task3)

gulp的异步任务

  1. //=====================================第一种====================================
  2. exports.callback =done=>{
  3. console.log('callback task')
  4. done();
  5. }
  6. //错误回调 如果多个任务同时执行的时候错误优先的原则,如果执行错误回调,其他的任务都会暂停
  7. exports.callback_error =done=>{
  8. console.log('callback task')
  9. done(new Error('task failled'))
  10. }
  11. // ==================================第二种====================================
  12. //注意 Promise.resolve() 不用传入任何参数 因为gulp会忽略掉
  13. exports.promise =() =>{
  14. console.log('promise task')
  15. return Promise.resolve()
  16. }
  17. exports.promise_error =() =>{
  18. console.log('promise task')
  19. return Promise.reject(new Error('task failed')) //后面的任务都会停止执行
  20. }
  21. // ===================================第三种==================================
  22. const timeout = time =>{
  23. return new Promise(resolve =>{
  24. setTimeout(resolve,time)
  25. })
  26. }
  27. exports.async = async()= >{
  28. await timeout(1000);
  29. console.log('async task')
  30. }
  31. // ===============================第四种================================
  32. exports.stream =() =>{
  33. const readStream =fs.createReadStream('package.json');
  34. const writeStream =fs.createWriteStream('temp.txt');
  35. readStream.pipe(writeStream)
  36. return readStream
  37. }
  38. exports.stream =done =>{
  39. const readStream =fs.createReadStream('package.json');
  40. const writeStream =fs.createWriteStream('temp.txt');
  41. readStream.pipe(writeStream)
  42. readStream.on('end',()=>{
  43. done()
  44. })
  45. }

Gulp 构建过程的核心工作原理

  1. //这是node环境
  2. const fs =require('fs');
  3. const {Transform} =require('stream');
  4. export.default = () =>{
  5. //文件读取流
  6. const read =fs.createReadStream('normalize.css');
  7. //文件的写入流
  8. const write =fs.createWriteStream('normalize.min.css');
  9. //文件转换流
  10. const transform =new Transform({
  11. transform:(chunk,encoding,callback)=>{
  12. // 核心转换过程的实现
  13. // chunk => 读取流中读取到的内容
  14. const input = chunk.toString();
  15. const output = input.replace(/\s+/g,"").replace(/\/\*.+?\*\//g,'')
  16. callback(null,output)
  17. }
  18. })
  19. //把读取出来的文件流导入写入文件流
  20. read.pipe(transform) //转换
  21. .pipe(write) //写入
  22. return read
  23. }

Gulp 操作文件API

  1. const {src, dest} =require('gulp');
  2. const cleanCss =require('gulp-clean-css')
  3. const rename = require('gulp-rename')
  4. exports.default =()=>{
  5. // src 可以理解成为读取流,后面接的是目标路劲
  6. //return src('src/normalize.css')
  7. //也可以使用通配符的方式
  8. return src('src/*.css')
  9. //同时构建过程就是文件的转换,可以安装一个插件,这个插件可以压缩css
  10. // 代码的转换 yarn add gulp-clean-css --dev 的方式安装这个插件
  11. .pipe(cleanCss())
  12. //如果你还想就行其他转换 就是对css 就行压缩,并重命名以.min.css为文件名 但是需要
  13. //yarn add gulp remane --dev
  14. .pipe(rename({{extname:'.min.css'}))
  15. // pipe 导出 dest写入流 后面接的是目标目录
  16. .pipe(dest('dest'))
  17. }

Gulp样式编译

  1. const {src,dest} =require('gulp');
  2. const sass =requrie('gulp-sass')
  3. const style =()=>{
  4. //return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构
  5. return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录
  6. //同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev
  7. .pipe(sass())
  8. .pipe(dest('dist'))
  9. }
  10. module.exports= {
  11. style
  12. }

gulp的脚步编译

  1. const {src,dest} =require('gulp');
  2. const sass =requrie('gulp-sass')
  3. const babel =require('gulp-babel')
  4. const style =()=>{
  5. //return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构
  6. return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录
  7. //同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev
  8. .pipe(sass())
  9. .pipe(dest('dist'))
  10. }
  11. const script =()=>{
  12. return src('src/assets/style/*.js',{base:'src'}) //
  13. //同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev
  14. .pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'
  15. // 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev
  16. .pipe(dest('dist'))
  17. }
  18. module.exports= {
  19. style,
  20. script
  21. }

gulp页面模板的编译

  1. const {src,dest,parallel} =require('gulp');
  2. const sass =requrie('gulp-sass')
  3. const babel =require('gulp-babel')
  4. const swig =require('gulp-swig')
  5. const style =()=>{
  6. //return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构
  7. return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录
  8. //同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev
  9. .pipe(sass())
  10. .pipe(dest('dist'))
  11. }
  12. const script =()=>{
  13. return src('src/assets/style/*.js',{base:'src'}) //
  14. //同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev
  15. .pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'
  16. // 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev
  17. .pipe(dest('dist'))
  18. }
  19. const page =()=>{
  20. return src('src/*.html',{base:'src'}) //
  21. //同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev
  22. .pipe(swig())
  23. .pipe(dest('dist'))
  24. }
  25. const compile = parallel(style,script,page)
  26. module.exports= {
  27. compile
  28. }

图片和字体文件转换

  1. const {src,dest,parallel} =require('gulp');
  2. const sass =requrie('gulp-sass')
  3. const babel =require('gulp-babel')
  4. const swig =require('gulp-swig')
  5. const style =()=>{
  6. //return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构
  7. return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录
  8. //同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev
  9. .pipe(sass())
  10. .pipe(dest('dist'))
  11. }
  12. const script =()=>{
  13. return src('src/assets/style/*.js',{base:'src'}) //
  14. //同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev
  15. .pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'
  16. // 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev
  17. .pipe(dest('dist'))
  18. }
  19. const page =()=>{
  20. return src('src/*.html',{base:'src'}) //
  21. //同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev
  22. .pipe(swig())
  23. .pipe(dest('dist'))
  24. }
  25. const imgage =()=>{
  26. return src('src/assets/image/**',{base:'src'}) //
  27. //同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev
  28. .pipe(imagemin())
  29. .pipe(dest('dest'))
  30. }
  31. //字体文件
  32. const font =()=>{
  33. return src('src/assets/font/**',{base:'src'}) //
  34. //同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev
  35. .pipe(imagemin())
  36. .pipe(dest('dist'))
  37. }
  38. const compile = parallel(style,script,page,font,imgage)
  39. module.exports= {
  40. compile,
  41. }

其他文件及其他文件的清除

  1. const {src,dest,parallel,series} =require('gulp');
  2. const sass =requrie('gulp-sass')
  3. const babel =require('gulp-babel')
  4. const swig =require('gulp-swig')
  5. const del =require('del') //这里需要安装 del 可以在gulp 那里使用 yarn add del --dev
  6. const style =()=>{
  7. //return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构
  8. return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录
  9. //同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev
  10. .pipe(sass())
  11. .pipe(dest('dist'))
  12. }
  13. const script =()=>{
  14. return src('src/assets/style/*.js',{base:'src'}) //
  15. //同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev
  16. .pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'
  17. // 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev
  18. .pipe(dest('dist'))
  19. }
  20. const page =()=>{
  21. return src('src/*.html',{base:'src'}) //
  22. //同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev
  23. .pipe(swig())
  24. .pipe(dest('dist'))
  25. }
  26. const imgage =()=>{
  27. return src('src/assets/image/**',{base:'src'}) //
  28. //同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev
  29. .pipe(imagemin())
  30. .pipe(dest('dist'))
  31. }
  32. //字体文件
  33. const font =()=>{
  34. return src('src/assets/font/**',{base:'src'}) //
  35. //同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev
  36. .pipe(imagemin())
  37. .pipe(dest('dist'))
  38. }
  39. // 其他的文件
  40. const extra =()=>{
  41. return src('public/**',{base:'public'}) //
  42. .pipe(dest('dist'))
  43. }
  44. const clean = ()=>{
  45. return del(['dist'])
  46. }
  47. const compile = parallel(style,script,page,font,imgage);
  48. const build =series(clean,parallel(compile,extra))
  49. module.exports= {
  50. compile,
  51. build
  52. }

自动加载插件

  1. const {src,dest,parallel,series} =require('gulp');
  2. const del =require('del') //这里需要安装 del 可以在gulp 那里使用 yarn add del --dev
  3. const loadPlugins =require('gulp-load-plugins');
  4. const plugins =loadPlugins()
  5. const style =()=>{
  6. //return src('src/assets/style/*.scss') //这种会在dest目录下只生成scss文件 没有其他的目录结构
  7. return src('src/assets/style/*.scss',{base:'src'}) //这种会还有asssets、style目录
  8. //同时还有对文件进行转换 这里要安装yarn add gulp-sass --dev
  9. .pipe(sass())
  10. .pipe(dest('dist'))
  11. }
  12. const script =()=>{
  13. return src('src/assets/style/*.js',{base:'src'}) //
  14. //同时还有对文件进行转换 这里要安装yarn add gulp-babel --dev
  15. .pipe(babel({presets:['@babel/preset-env']})) //运行后 会报一个错误 cannot find module '@babel/core'
  16. // 需要手动安装这个模块 yarn add @babel/core @babel/preset-env --dev
  17. .pipe(dest('dist'))
  18. }
  19. const page =()=>{
  20. return src('src/*.html',{base:'src'}) //
  21. //同时还有对文件进行转换 这里要安装yarn add gulp-swig--dev
  22. .pipe(plugins.swig())
  23. .pipe(dest('dist'))
  24. }
  25. const imgage =()=>{
  26. return src('src/assets/image/**',{base:'src'}) //
  27. //同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev
  28. .pipe(plugins.imagemin())
  29. .pipe(dest('dist'))
  30. }
  31. //字体文件
  32. const font =()=>{
  33. return src('src/assets/font/**',{base:'src'}) //
  34. //同时还有对文件进行转换 这里要安装yarn add gulp-imagemin--dev
  35. .pipe(plugins.imagemin())
  36. .pipe(dest('dist'))
  37. }
  38. // 其他的文件
  39. const extra =()=>{
  40. return src('public/**',{base:'public'}) //
  41. .pipe(dest('dist'))
  42. }
  43. const clean = ()=>{
  44. return del(['dist'])
  45. }
  46. const compile = parallel(style,script,page,font,imgage);
  47. const build =series(clean,parallel(compile,extra))
  48. module.exports= {
  49. compile,
  50. build
  51. }

Gulp的热更新

  1. //1.首先 安装yarn add browser-sync --dev 这个模块
  2. const {src,dest,parallel,series} =require('gulp');
  3. //然后单独引入这个模块
  4. const browserSync =require('browser-sync')
  5. const del =require('del')
  6. const loadPlugins =require('gulp-load-plugins');
  7. const plugins =loadPlugins();
  8. //创建一个开发服务器
  9. const bs = browserSync.create();
  10. const style =()=>{
  11. //return src('src/assets/style/*.scss')
  12. return src('src/assets/style/*.scss',{base:'src'})
  13. .pipe(sass())
  14. .pipe(dest('dist'))
  15. }
  16. const script =()=>{
  17. return src('src/assets/style/*.js',{base:'src'}) //
  18. .pipe(babel({presets:['@babel/preset-env']}))
  19. .pipe(dest('dist'))
  20. }
  21. const page =()=>{
  22. return src('src/*.html',{base:'src'}) //
  23. .pipe(plugins.swig())
  24. .pipe(dest('dist'))
  25. }
  26. const imgage =()=>{
  27. return src('src/assets/image/**',{base:'src'}) //
  28. .pipe(plugins.imagemin())
  29. .pipe(dest('dist'))
  30. }
  31. //字体文件
  32. const font =()=>{
  33. return src('src/assets/font/**',{base:'src'})
  34. .pipe(plugins.imagemin())
  35. .pipe(dest('dist'))
  36. }
  37. // 其他的文件
  38. const extra =()=>{
  39. return src('public/**',{base:'public'}) //
  40. .pipe(dest('dist'))
  41. }
  42. const clean = ()=>{
  43. return del(['dist'])
  44. }
  45. const serve =() =>{
  46. bs.init({
  47. notify:false, // 关闭提示(xxxx is not connet)
  48. port:2080,
  49. open:false, //是否自动打开浏览器
  50. files:'dist/**', //当dist 改变的时候页面自动改变
  51. server:{
  52. //baseDir 指的是网站的根目录
  53. baseDir:'dist',
  54. //routes这个优先级比baseDir还有高
  55. routes:{
  56. '_node/modules':'node_modules'
  57. }
  58. }
  59. })
  60. }
  61. const compile = parallel(style,script,page,font,imgage);
  62. const build =series(clean,parallel(compile,extra))
  63. module.exports= {
  64. compile,
  65. serve,
  66. build
  67. }

监听变化以及构建优化

  1. const {src,dest,parallel,series,watch} =require('gulp');
  2. const browserSync =require('browser-sync')
  3. const del =require('del')
  4. const loadPlugins =require('gulp-load-plugins');
  5. const plugins =loadPlugins();
  6. const bs = browserSync.create();
  7. const style =()=>{
  8. //return src('src/assets/style/*.scss')
  9. return src('src/assets/style/*.scss',{base:'src'})
  10. .pipe(sass())
  11. .pipe(dest('dist'))
  12. .pipe(bs.reload({stream:true}))
  13. }
  14. const script =()=>{
  15. return src('src/assets/style/*.js',{base:'src'}) //
  16. .pipe(babel({presets:['@babel/preset-env']}))
  17. .pipe(dest('dist'))
  18. .pipe(bs.reload({stream:true}))
  19. }
  20. const page =()=>{
  21. return src('src/*.html',{base:'src'}) //
  22. .pipe(plugins.swig())
  23. .pipe(dest('dist'))
  24. .pipe(bs.reload({stream:true}))
  25. }
  26. const imgage =()=>{
  27. return src('src/assets/image/**',{base:'src'}) //
  28. .pipe(plugins.imagemin())
  29. .pipe(dest('dist'))
  30. }
  31. //字体文件
  32. const font =()=>{
  33. return src('src/assets/font/**',{base:'src'})
  34. .pipe(plugins.imagemin())
  35. .pipe(dest('dist'))
  36. }
  37. // 其他的文件
  38. const extra =()=>{
  39. return src('public/**',{base:'public'}) //
  40. .pipe(dest('dist'))
  41. }
  42. const clean = ()=>{
  43. return del(['dist'])
  44. }
  45. const serve =() =>{
  46. watch('src/assets/style/*.scss',style)
  47. watch('src/assets/style/*.js',script)
  48. watch('src/*.html',page)
  49. watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)
  50. //watch('src/assets/image/**',imgage)
  51. //watch('src/assets/font/**',font)
  52. //watch('public/**',extra)
  53. bs.init({
  54. notify:false,
  55. port:2080,
  56. open:false,
  57. //files:'dist/**',
  58. server:{
  59. baseDir:['dist','src','public'],
  60. routes:{
  61. '_node/modules':'node_modules'
  62. }
  63. }
  64. })
  65. }
  66. const compile = parallel(style,script,page);
  67. const build =series(clean,parallel(compile,font,imgage,extra))
  68. const develop =series(compile,serve)
  69. module.exports= {
  70. clean,
  71. compile,
  72. serve,
  73. develop
  74. }

useref文件引用处理

  1. //安装useref yarn add useref --dev
  2. const {src,dest,parallel,series,watch} =require('gulp');
  3. const browserSync =require('browser-sync')
  4. const del =require('del')
  5. const loadPlugins =require('gulp-load-plugins');
  6. const plugins =loadPlugins();
  7. const bs = browserSync.create();
  8. const style =()=>{
  9. //return src('src/assets/style/*.scss')
  10. return src('src/assets/style/*.scss',{base:'src'})
  11. .pipe(sass())
  12. .pipe(dest('dist'))
  13. .pipe(bs.reload({stream:true}))
  14. }
  15. const script =()=>{
  16. return src('src/assets/style/*.js',{base:'src'}) //
  17. .pipe(babel({presets:['@babel/preset-env']}))
  18. .pipe(dest('dist'))
  19. .pipe(bs.reload({stream:true}))
  20. }
  21. const page =()=>{
  22. return src('src/*.html',{base:'src'}) //
  23. .pipe(plugins.swig())
  24. .pipe(dest('dist'))
  25. .pipe(bs.reload({stream:true}))
  26. }
  27. const imgage =()=>{
  28. return src('src/assets/image/**',{base:'src'}) //
  29. .pipe(plugins.imagemin())
  30. .pipe(dest('dist'))
  31. }
  32. //字体文件
  33. const font =()=>{
  34. return src('src/assets/font/**',{base:'src'})
  35. .pipe(plugins.imagemin())
  36. .pipe(dest('dist'))
  37. }
  38. // 其他的文件
  39. const extra =()=>{
  40. return src('public/**',{base:'public'}) //
  41. .pipe(dest('dist'))
  42. }
  43. const clean = ()=>{
  44. return del(['dist'])
  45. }
  46. const serve =() =>{
  47. watch('src/assets/style/*.scss',style)
  48. watch('src/assets/style/*.js',script)
  49. watch('src/*.html',page)
  50. watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)
  51. //watch('src/assets/image/**',imgage)
  52. //watch('src/assets/font/**',font)
  53. //watch('public/**',extra)
  54. bs.init({
  55. notify:false,
  56. port:2080,
  57. open:false,
  58. //files:'dist/**',
  59. server:{
  60. baseDir:['dist','src','public'],
  61. routes:{
  62. '_node/modules':'node_modules'
  63. }
  64. }
  65. })
  66. }
  67. const useref=() =>{
  68. return src('dist/*.html',{base:'dist'})
  69. .pipe(plugins.useref({searchPath:['dist','.']}))
  70. // 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev
  71. //对三种不同文件不同的操作 需要 yarn add gulp-if --dev
  72. .pipe(plugins.if(/\.js$/,plugins.uglify()))
  73. //压缩css
  74. .pipe(plugins.if(/\.css$/,plugins.cleanCss()))
  75. //压缩html
  76. .pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true})))
  77. .pipe(dest('release'))
  78. }
  79. const compile = parallel(style,script,page);
  80. const build =series(clean,parallel(compile,font,imgage,extra))
  81. const develop =series(compile,serve)
  82. module.exports= {
  83. clean,
  84. compile,
  85. serve,
  86. develop
  87. }

重新规划构建过程

  1. //安装useref yarn add useref --dev
  2. const {src,dest,parallel,series,watch} =require('gulp');
  3. const browserSync =require('browser-sync')
  4. const del =require('del')
  5. const loadPlugins =require('gulp-load-plugins');
  6. const plugins =loadPlugins();
  7. const bs = browserSync.create();
  8. const style =()=>{
  9. //return src('src/assets/style/*.scss')
  10. return src('src/assets/style/*.scss',{base:'src'})
  11. .pipe(sass())
  12. .pipe(dest('temp'))
  13. .pipe(bs.reload({stream:true}))
  14. }
  15. const script =()=>{
  16. return src('src/assets/style/*.js',{base:'src'}) //
  17. .pipe(babel({presets:['@babel/preset-env']}))
  18. .pipe(dest('temp'))
  19. .pipe(bs.reload({stream:true}))
  20. }
  21. const page =()=>{
  22. return src('src/*.html',{base:'src'}) //
  23. .pipe(plugins.swig())
  24. .pipe(dest('temp'))
  25. .pipe(bs.reload({stream:true}))
  26. }
  27. const imgage =()=>{
  28. return src('src/assets/image/**',{base:'src'}) //
  29. .pipe(plugins.imagemin())
  30. .pipe(dest('dist'))
  31. }
  32. //字体文件
  33. const font =()=>{
  34. return src('src/assets/font/**',{base:'src'})
  35. .pipe(plugins.imagemin())
  36. .pipe(dest('dist'))
  37. }
  38. // 其他的文件
  39. const extra =()=>{
  40. return src('public/**',{base:'public'}) //
  41. .pipe(dest('dist'))
  42. }
  43. const clean = ()=>{
  44. return del(['dist','temp'])
  45. }
  46. const serve =() =>{
  47. watch('src/assets/style/*.scss',style)
  48. watch('src/assets/style/*.js',script)
  49. watch('src/*.html',page)
  50. watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)
  51. //watch('src/assets/image/**',imgage)
  52. //watch('src/assets/font/**',font)
  53. //watch('public/**',extra)
  54. bs.init({
  55. notify:false,
  56. port:2080,
  57. open:false,
  58. //files:'dist/**',
  59. server:{
  60. baseDir:['temp','src','public'],
  61. routes:{
  62. '_node/modules':'node_modules'
  63. }
  64. }
  65. })
  66. }
  67. const useref=() =>{
  68. return src('temp/*.html',{base:'dist'})
  69. .pipe(plugins.useref({searchPath:['dist','.']}))
  70. // 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev
  71. //对三种不同文件不同的操作 需要 yarn add gulp-if --dev
  72. .pipe(plugins.if(/\.js$/,plugins.uglify()))
  73. //压缩css
  74. .pipe(plugins.if(/\.css$/,plugins.cleanCss()))
  75. //压缩html
  76. .pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true})))
  77. .pipe(dest('dist'))
  78. }
  79. const compile = parallel(style,script,page);
  80. const build =series(clean,parallel(series(compile,useref),font,imgage,extra))
  81. const develop =series(compile,serve)
  82. module.exports= {
  83. clean,
  84. compile,
  85. serve,
  86. develop
  87. }

gulp的补充

  1. //安装useref yarn add useref --dev
  2. const {src,dest,parallel,series,watch} =require('gulp');
  3. const browserSync =require('browser-sync')
  4. const del =require('del')
  5. const loadPlugins =require('gulp-load-plugins');
  6. const plugins =loadPlugins();
  7. const bs = browserSync.create();
  8. const style =()=>{
  9. //return src('src/assets/style/*.scss')
  10. return src('src/assets/style/*.scss',{base:'src'})
  11. .pipe(sass())
  12. .pipe(dest('temp'))
  13. .pipe(bs.reload({stream:true}))
  14. }
  15. const script =()=>{
  16. return src('src/assets/style/*.js',{base:'src'}) //
  17. .pipe(babel({presets:['@babel/preset-env']}))
  18. .pipe(dest('temp'))
  19. .pipe(bs.reload({stream:true}))
  20. }
  21. const page =()=>{
  22. return src('src/*.html',{base:'src'}) //
  23. .pipe(plugins.swig())
  24. .pipe(dest('temp'))
  25. .pipe(bs.reload({stream:true}))
  26. }
  27. const imgage =()=>{
  28. return src('src/assets/image/**',{base:'src'}) //
  29. .pipe(plugins.imagemin())
  30. .pipe(dest('dist'))
  31. }
  32. //字体文件
  33. const font =()=>{
  34. return src('src/assets/font/**',{base:'src'})
  35. .pipe(plugins.imagemin())
  36. .pipe(dest('dist'))
  37. }
  38. // 其他的文件
  39. const extra =()=>{
  40. return src('public/**',{base:'public'}) //
  41. .pipe(dest('dist'))
  42. }
  43. const clean = ()=>{
  44. return del(['dist','temp'])
  45. }
  46. const serve =() =>{
  47. watch('src/assets/style/*.scss',style)
  48. watch('src/assets/style/*.js',script)
  49. watch('src/*.html',page)
  50. watch(['src/assets/image/**','src/assets/font/**','public/**',],bs.reload)
  51. //watch('src/assets/image/**',imgage)
  52. //watch('src/assets/font/**',font)
  53. //watch('public/**',extra)
  54. bs.init({
  55. notify:false,
  56. port:2080,
  57. open:false,
  58. //files:'dist/**',
  59. server:{
  60. baseDir:['temp','src','public'],
  61. routes:{
  62. '_node/modules':'node_modules'
  63. }
  64. }
  65. })
  66. }
  67. const useref=() =>{
  68. return src('temp/*.html',{base:'dist'})
  69. .pipe(plugins.useref({searchPath:['dist','.']}))
  70. // 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev
  71. //对三种不同文件不同的操作 需要 yarn add gulp-if --dev
  72. .pipe(plugins.if(/\.js$/,plugins.uglify()))
  73. //压缩css
  74. .pipe(plugins.if(/\.css$/,plugins.cleanCss()))
  75. //压缩html
  76. .pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true})))
  77. .pipe(dest('dist'))
  78. }
  79. const compile = parallel(style,script,page);
  80. const build =series(clean,parallel(series(compile,useref),font,imgage,extra))
  81. const develop =series(compile,serve)
  82. module.exports= {
  83. clean,
  84. build,
  85. develop
  86. }

封装工作流

  1. //安装useref yarn add useref --dev
  2. const {src,dest,parallel,series,watch} =require('gulp');
  3. const browserSync =require('browser-sync')
  4. const del =require('del')
  5. const loadPlugins =require('gulp-load-plugins');
  6. const plugins =loadPlugins();
  7. const bs = browserSync.create();
  8. const cwd = process.cwd();
  9. let config ={
  10. build:{
  11. src:'scr',
  12. dist:'dist',
  13. temp:'temp',
  14. public:'public',
  15. paths:{
  16. styles:'assets/style/*.scss',
  17. script:'assets/style/*.js',
  18. page:'*.html',
  19. image:'assets/image/**',
  20. font:'assets/font/**',
  21. }
  22. }
  23. }
  24. try{
  25. const loadConfig =require(`${cwd}\pages.config.js`)
  26. congif =Object.assign({},config,loadConfig)
  27. }
  28. const style =()=>{
  29. //return src('src/assets/style/*.scss')
  30. return src(config.build.paths.styles,{base:config.bulid.src,cwd:config.bulid.src})
  31. .pipe(sass({outputStyle:'expanded'}))
  32. .pipe(dest(config.build.temp))
  33. .pipe(bs.reload({stream:true}))
  34. }
  35. const script =()=>{
  36. return src(config.build.paths.script,{base:config.bulid.src,cwd:config.bulid.src})
  37. .pipe(babel({presets:[require('@babel/preset-env')]}))
  38. .pipe(dest(config.build.temp))
  39. .pipe(bs.reload({stream:true}))
  40. }
  41. const page =()=>{
  42. return src(config.build.paths.page,{base:config.bulid.src,cwd:config.bulid.src}) //
  43. .pipe(plugins.swig({data:config.data}))
  44. .pipe(dest(config.build.temp))
  45. .pipe(bs.reload({stream:true}))
  46. }
  47. const imgage =()=>{
  48. return src(config.build.paths.imgage,{base:config.bulid.src,cwd:config.bulid.src}) //
  49. .pipe(plugins.imagemin())
  50. .pipe(dest(config.build.dist))
  51. }
  52. //字体文件
  53. const font =()=>{
  54. return src(config.build.paths.font,{base:config.bulid.src,cwd:config.bulid.src})
  55. .pipe(plugins.imagemin())
  56. .pipe(dest(config.build.dist))
  57. }
  58. // 其他的文件
  59. const extra =()=>{
  60. return src('**',{base:config.bulid.public,cwd:config.bulid.public}) //
  61. .pipe(dest(config.build.dist))
  62. }
  63. const clean = ()=>{
  64. return del([config.bulid.dist,config.bulid.temp])
  65. }
  66. const serve =() =>{
  67. watch(config.build.paths.styles,{cwd:config.bulid.src},style)
  68. watch(config.build.paths.script,{cwd:config.bulid.src},script)
  69. watch(config.build.paths.page,{cwd:config.bulid.src},page)
  70. watch([config.build.paths.image,config.build.paths.font], {cwd:config.build.src},bs.reload)
  71. watch('**',{cwd:config.build.public},bs.reload)
  72. //watch('src/assets/image/**',imgage)
  73. //watch('src/assets/font/**',font)
  74. //watch('public/**',extra)
  75. bs.init({
  76. notify:false,
  77. port:2080,
  78. open:false,
  79. //files:'dist/**',
  80. server:{
  81. baseDir:[config.build.temp,config.build.src,config.build.public],
  82. routes:{
  83. '_node/modules':'node_modules'
  84. }
  85. }
  86. })
  87. }
  88. const useref=() =>{
  89. return src(config.build.paths.page,{base:config.build.temp,cwd:config.bulid.src})
  90. .pipe(plugins.useref({searchPath:[config.build.temp,'.']}))
  91. // 压缩css、js 、html 这需要yarn add gulp-htmlmin gulp-uglify gulp-clean-css --dev
  92. //对三种不同文件不同的操作 需要 yarn add gulp-if --dev
  93. .pipe(plugins.if(/\.js$/,plugins.uglify()))
  94. //压缩css
  95. .pipe(plugins.if(/\.css$/,plugins.cleanCss()))
  96. //压缩html
  97. .pipe(plugins.if(/\.html$/,plugins.htmlmin({collapseWhitespace:true,minifyCSS:true,minifyJS:true})))
  98. .pipe(dest(config.build.dist))
  99. }
  100. const compile = parallel(style,script,page);
  101. const build =series(clean,parallel(series(compile,useref),font,imgage,extra))
  102. const develop =series(compile,serve)
  103. module.exports= {
  104. clean,
  105. build,
  106. develop
  107. }