Grunt Gulp前端工程化工具的使用

66 阅读2分钟

image-20230209223812747

前言

对之前使用前端自动化做一个回顾

正文

1.自动化构建初体验

// npm scripts"scrripts":{ 
    "build": 'sass scss/main.css css/style.css --watch' // --watch 监视文件改变
    "preserve": '', // 会自动在执行serve之前执行
     "serve": ''
     //yarn add npm-run-all同时执行多个命令(run-p)
      "start": 'run-p build serve'
}
​
// npm-run-all同时执行多个命令

2.常用的自动化构建工具

  • 常用的构建工具:Grunt Gulp FIS

    • Grunt 功能强大几乎能做任何事情,但是是基于零时文件构建,速度较慢
    • Gulp 基于内存实现,默认支持多个任务
    • FIS 百度推出
  • webpack属于打包工具

3.Grunt的基本使用

3-1.基本使用

// Grunt入口文件
// 定义grunt自动执行的任务
//需导出一个函数
// 接收一个grunt 的形参, 内部提供 APImodule.exports = grunt => {
  // yarn grunt foo 会执行此任务
  grunt.registerTask('foo', () => { })
  
  grunt.registerTask('bar', '任务描述', () => { })
  
  //yarn grunt 会自动调取 default任务
  grunt.registerTask('default', () => { })
  //依次执行
  grunt.registerTask('default', ['foo', 'bar'])
  //异步任务(默认执行同步任务)
  grunt.registerTask('async-task', function () {
    const done = this.async()
    setTimeout(() => {
      console.log('async-task')
      done()
    }, 1000);
  })
​
}

3-2.标记任务失败

// 标记任务失败 (通过在函数体中 return false 标记失败 会导致后续任务无法执行)
module.exports = grunt => {
  // yarn grunt foo 会执行此任务
  grunt.registerTask('foo', () => {
    return false
  })
  grunt.registerTask('bar', () => {
    console.log('bar');
  })
  grunt.registerTask('default', ['foo', 'bar'])
  //异步任务(done(false))
  grunt.registerTask('async-task', function () {
    const done = this.async()
    setTimeout(() => {
      console.log('async-task')
      done(false)
    }, 1000);
  })
}

4.Grunt的配置方法

//配置属性
module.exports = grunt => {
  // grunt.initConfig({
  //   foo: 'bar'
  // })
  grunt.initConfig({
    foo: {
      bar: 123
    }
  })
  grunt.registerTask('foo', () => {
    console.log(grunt.config('foo'));
    console.log(grunt.config('foo,bar'));
  })
}

5.Grunt的多目标模式

//多目标模式任务
module.exports = grunt => {
 
  grunt.initConfig({
    build: {
      //除了options作为任务选项 其他的都会作为数据
      options: {
        foo:'aaa'
      },
      css: 123,
      js: 12
    }
  })
  //多目标, 可以让任务配置子任务  通过 yarn grunt build:css执行指定子任务
  grunt.registerMultiTask('build', function(){
    console.log(this.target);
    console.log(this.data);
    console.log(this.options);
  })
}

6.Grunt 插件的使用

// 插件的使用
module.exports = grunt => {
  grunt.initConfig({
    clean: {
      temp: 'temp/**' //清除temp下的所有子目录文件
      // temp: 'temp/*' //清除temp下的所有文件
    }
  })
  // yarn add grunt-contrib-clean 用于清理临时文件  使用 yarn grunt clean
  grunt.loadNpmTasks('grunt-contrib-clean')
}

7.Grunt 常用插件及总结

7-1 sass插件的使用

const sass = require('sass')
module.exports = grunt => {
  grunt.initConfig({
    sass: {
      options: {
        sourceMap: true,
        implementation: sass
      },
      main: {
        files: {
          'dist/css/main.css': 'src/scss/main.scss'
        }
      }
    }
  })
  grunt.loadNpmTasks('grunt-sass')
}

7-2 babel 及 load-grunt-tasks 插件的使用

//babel插件 的使用
const sass = require('sass')
const loadGruntTasks = require('load-grunt-tasks')
module.exports = grunt => {
  grunt.initConfig({
    sass: {
      options: {
        sourceMap: true,
        implementation: sass
      },
      main: {
        files: {
          'dist/css/main.css': 'src/scss/main.scss'
        }
      }
    },
​
    babel: {
      options: {
        sourceMap: true,
        presets: ['@babel/preset-env']
      },
      main: {
        files: {
          'dist/js/app.js': 'src/js/app.js'
        }
      }
    }
  })
  // grunt.loadNpmTasks('grunt-sass')
  loadGruntTasks(grunt) //自动加载所有的task
}

7-3 grunt-contrib-watch 自动监听的使用

//babel插件 的使用
const sass = require('sass')
const loadGruntTasks = require('load-grunt-tasks')
module.exports = grunt => {
  grunt.initConfig({
    sass: {
      options: {
        sourceMap: true,
        implementation: sass
      },
      main: {
        files: {
          'dist/css/main.css': 'src/scss/main.scss'
        }
      }
    },
​
    babel: {
      options: {
        sourceMap: true,
        presets: ['@babel/preset-env']
      },
      main: {
        files: {
          'dist/js/app.js': 'src/js/app.js'
        }
      }
    },
    watch: {
      js: {
        files: ['src/js/*.js'],
        tasks: ['babel']
      },
      css: {
        files: ['src/scss/*.scss'],
        tasks: ['sass']
      }
    }
  })
  // grunt.loadNpmTasks('grunt-sass')
  loadGruntTasks(grunt) //自动加载所有的task
​
  grunt.registerTask('default', ['sass', 'babel', 'watch']) // 优化
}

明天继续更 Gulp ......