自动化构建--grunt(代码片段)

MissSage MissSage     2022-11-30     434

关键词:

Grunt怎么使用?

Grunt算是最早的一款前端构建系统了,Grunt的插件生态非常的完善,构建过程基于临时文件实现,构建过程稍微会慢一点

安装Grunt

yarn add grunt

安装完成后在项目根目录添加Grunt的入口文件gruntfile.js

  • Grunt的入口文件
  • 用于定义一些需要 Grunt 自动执行的任务
  • 需要导出一个函数
  • 此函数接收一个 Grunt 的形参,内部提供一些创建任务可以用到的 API

Grunt 任务注册

Grunt 使用接口registerTask来注册任务


module.exports=grunt=>
  // 注册任务
  grunt.registerTask(\'foo\',()=>
    console.log(\'hello grunt~\')
  )
  // 注册默认任务
  grunt.registerTask(\'default\',()=>
    console.log(\'default task~\')
  )

执行grunt任务

yarn grunt bar

执行结果如下:

默认任务不需要指定任务名

yarn grunt

执行结果如下:

Grunt的Default任务

一般注册default任务来映射其它任务

// default的任务的第二个参数传入一个数组,数组中是要执行的其它的任务,执行default任务会依次执行数组中的任务
grunt.registerTask(\'default\',[\'foo\',\'bar\'])

此时运行default任务结果如下图所示:

Grunt 的异步任务

Grunt默认使用同步模式,要使用异步操作,需要在任务中使用this.async() 来得到一个回调函数,并在异步操作完成后执行此回调,不然异步操作不会得到执行,此任务的回调函数不能是箭头函数

grunt.registerTask(\'async-task\', function()
  const done=this.async()
    setTimeout(()=>
        console.log(\'async task working...\')
        done()

    ,1000)
)

Grunt标记任务失败

任务失败时,需要在任务中返回false来标记任务失败,执行多个任务时,当有任务失败了,后续任务就不会再执行了,可以根据提示添加force参数来让任务保持继续执行

grunt.registerTask(\'badtask\',()=>
    console.log(\'badtask working\')
    return false
)
grunt.registerTask(\'default\',[\'foo\',\'badtask\',\'bar\'])

运行default失败的任务结果如下:

从图中可以看到,foo任务执行了,但bar任务没有任务

尝试添加--force强制不打断执行:

此时bar任务也执行了

Grunt 标记异步任务的失败

异步任务不能像同步任务一样直接返回false,需要在this.async()中传入参数false

grunt.registerTask(\'async-badtask\',function()
    const done=this.async()
    setTimeout(() => 
        console.log(\'async bad\')
        done(false)
    , 1000);
)

Grunt 的配置选项

Grunt 提供一个API叫initConfig,用来添加一些配置选项,选项名一般与任务名保持一致,选项值可以是值,也可以是对象,具体看代码:

grunt.initConfig(
    foo:\'bar\',
    objtest:
        prop1:1232,
        objprop:
            foo:\'111\'
        
    
)
grunt.registerTask(\'objtest\',()=>
    // 配置选项为对象时可以通过"."语法拿到子属性
    console.log(grunt.config(\'objtest.objprop.foo\'))
)
grunt.registerTask(\'foo\',()=>
    console.log(grunt.config(\'foo\'))
)
grunt.registerTask(\'default\',[\'foo\',\'objtest\'])
)

运行结果如下:

Grunt 的多目标任务

Grunt注册的任务可以根据配置形成多个子任务

为任务配置多个目标:

grunt.initConfig(
    // 为multiTask任务配置的多个目标
    multiTask:
        css:\'1\',
        js:\'2\'
    
)

注册多目标任务:

//使用registerMultiTask注册多目标任务
grunt.registerMultiTask(\'multiTask\',function()
    // 可以通过this.target拿到目标的名称,this.data拿到目标的数据
    console.log(`target:$this.target,data:$this.data`)
)

multiTask 运行结果:

从上图可以看到多个目标都被执行了,当我们只想执行指定目标时,通过冒号+目标名来执行指定的目标

注意:多目标任务不会对配置选项中的options进行执行,如下所示:

// initConfig中的配置选项
grunt.initConfig(
    multiTask:
        options:
            foo:\'bar\',
        ,
        css:\'1\',
        js:\'2\'
    
)
grunt.registerMultiTask(\'multiTask\',function()
    console.log(`target:$this.target,data:$this.data`)
)

执行multiTask任务结果:

可以看出,options中的配置没有对应的执行输出

配置的目标中也有options时,会覆盖外层的options的对应属性

grunt.initConfig(
  multiTask:
      options:
          foo:\'bar\',
      ,
      css:
          options:
              // 当执行css目标时,此foo会覆盖外层foo
              foo:\'baz\'
          
      ,
      js:\'2\'
  
)
grunt.registerMultiTask(\'multiTask\',function()
  console.log(this.options())
)

执行multiTask结果:

css对应输出foo:baz
js对应输出foo:bar

grunt-contrib-clean插件 删除文件

  • Grunt的插件多数都是以grunt-contrib-的形式来名称的,比如grunt-contrib-clean就等于是clean任务,执行的时候只需要执行类似yarn grunt clean就可以了,同时它的配置选项名也只需要写clean就可以了

  • grunt-contrib-clean插件用于清除文件,其是一个多目标任务,需要对其配置多目标选项,不然会执行会产生错误提示

  • 安装grunt-contrib-clean插件

yarn add grunt-contrib-clean

  • 加载任务
grunt.initConfig(
  clean:
      // 表示将会删除temp目录中的app.js文件
      // 除了单文件外,还可以批量删除文件,
      // 使用temp/*.txt来删除temp目录下以所有的txt文件
      // 使用temp/** 来删除temp目录以及temp里面的所有内容
      temp:\'temp/app.js\'
  
)
grunt.loadNpmTasks(\'grunt-contrib-clean\')
  • 执行任务

yarn grunt clean

grunt-sass插件处理sass

  • 安装依赖

yarn add grunt-sass sass --dev

  • 配置目标
const sass=require(\'sass\')
module.exports=grunt=>
  grunt.initConfig(
    sass:
      options:
        sourceMap:true,
        implementation:sass
        // 更多选项可以到grunt-sass的官方仓库查看
      ,
       main:
        files:
          \'dist/css/main.css\':\'src/scss/main.scss\'
        
      
    
  )
  grunt.loadNpmTasks(\'grunt-sass\')


load-grunt-tasks 插件自动加载

加载grunt插件的npm包,我们可以使用grunt.loadNpmTasks(\'插件名\')来加载插件,当插件很多时,其实不需要每个插件都手动加载一遍,可以使用grunt提供的loadGruntTasks方法,这个方法可以自动的为我们加载需要的插件

只需要将grunt对象传入作为参数就可以了:loadGruntTasks(grunt)

grunt-babel 编译es6语法

  • 安装依赖

yarn add grunt-babel @babel/core @babel/preset-env --dev

  • 配置目标
const loadGruntTasks=require(\'load-grunt-tasks\')
module.exports=grunt=>
  grunt.initConfig(
    babel:
        options:
            sourceMap:true,
            presets:[\'@babel/preset-env\']
        ,
        main:
            files:
                \'dist/js/app.js\':\'src/js/app.js\'
            
        
    
  )
  loadGruntTasks(grunt) //自动加载所有的grunt插件中的任务


grunt-contrib-watch监听文件变化

  • 安装:yarn add grunt-contrib-watch --dev

  • 目标配置

const loadGruntTasks=require(\'load-grunt-tasks\')
module.exports=grunt=>
  grunt.initConfig(
    watch:
      js:
          // 监听的文件
          files:[\'src/js/*.js\'],
          // 文件发生改变时需要执行的任务
          tasks:[\'babel\']
      ,
      css:
          // 监听的文件
          files:[\'src/scss/*.scss\'],
          // 文件发生改变时需要执行的任务
          tasks:[\'sass\']
      
    
  )
  loadGruntTasks(grunt) //自动加载所有的grunt插件中的任务
  // 因为watch任务只在目标文件发生变动时才会执行相关任务,若要一开始就执行相关任务,可以为相关任务做一个映射,使watch监听开始前就先执行一遍相关任务
  grunt.registerTask(\'default\',[\'sass\',\'babel\',\'watch\'])

运行yarn grunt就可以开启watch监听了

grunt-grunt使用(代码片段)

Grunt是前端的构建工具,类似后端使用的Ant,也是通过配置各种任务来达到前端代码自动构建的目地。Grunt和Grunt插件是通过npm 安装并管理的,npm是nodejs 的包管理器,所以第一步需要安装nodejs环境。安装grunt之前... 查看详情

前端工程化系列[04]-grunt构建工具的使用进阶(代码片段)

在前端工程化系列[02]-Grunt构建工具的基本使用和前端工程化系列[03]-Grunt构建工具的运转机制这两篇文章中,我们对Grunt以及Grunt插件的使用已经有了初步的认识,并探讨了Grunt的主要组件以及它的运转机制,这篇文章是Grunt使用... 查看详情

grunt的使用

...码变的庞大复杂,代码维护、打包极其困难。所以前端的自动化构建工具显得尤为重要。我们要讲的就是grunt。grunt是一个基于node.js的自动化构建、测试、生成文档的项目管理工具。一.安装grunt1.安装grunt之前首先得安装node:从... 查看详情

杂项:grunt-tmod(代码片段)

ylbtech-杂项:grunt-tmod 前端模板预编译工具tmodjs的grunt自动化插件。1.返回顶部1、grunt-tmod前端模板预编译工具 tmodjs 的grunt自动化插件。GettingStarted需要环境:Grunt ~0.4.1如果你没有用过 Grunt ,可以先看一下 ... 查看详情

grunt自动化构建环境搭建

1.环境准备需要有Node、NPM、Grunt、Ruby2.安装Node访问https://nodejs.org/en/3.安装Ruby访问http://rubyinstaller.org/downloads/archives验证node-vnpm-vruby-v4.安装Gruntnpminstall-ggrunt-cli5.安装Grunt插件npminstallgrunt-contrib-sas 查看详情

前端工作流程自动化——grunt/gulp自动化

前端工作流程自动化——Grunt/Gulp自动化  Grunt/Gulp都是node.js下的模块,简单来说是自动化任务运行器,两者都有社区及大量的插件支撑,在所有的自动化工具领域里,这两者是最好的前端自动化构建工具。  那么问题来了,... 查看详情

grunt-grunt使用(代码片段)

Grunt是前端的构建工具,类似后端使用的Ant,也是通过配置各种任务来达到前端代码自动构建的目地。Grunt和Grunt插件是通过npm 安装并管理的,npm是nodejs 的包管理器,所以第一步需要安装nodejs环境。安装grunt之前... 查看详情

grunt:将html页面捆绑到单个html文件中。所有依赖项(代码片段)

...动)将所有脚本/css捆绑到一个HTML文件中。使用Grunt实现构建过程(测试,代码格式化,JSDoc生成)。期望的解决方案:我需要一个Grunt插件(或可以与Grunt集成 查看详情

grunt的初级应用

...nt是JavaScript世界的构建工具.为什么要用构建工具?一句话:自动化。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。当你在Gruntfile 文件正确配置... 查看详情

gulp和grunt的区别

...的构建结构类似的Java项目而出现的Maven。Node催生了一批自动化工具,像Bower,Yeoman,Grunt等。而如今前端提到构建工具会自然想起Grunt。Java世界里的Maven提供了强大的包依赖管理和构建生命周期管理。在JavaScript的世界里,Grunt.js... 查看详情

前端构建的初步尝试(代码片段)

...经历的刀耕火种的工人时代(手动)后,迎来了工业时代(自动化工具)。随着node的出现,以此为基础的构建工具有代表性的有grunt,gulp,webpack.这些工具主要就是帮我们完成上述的工作.针对目前我们的项目的情况,不需要对这些工具... 查看详情

grunt常用插件的使用

Grunt 作为前端自动化构建工具,我主要使用到的是其中对css的less预处理器的转换,图片的压缩,js,css文件的合并压缩以及实时监测的插件。好处是:节省带宽流量,提高了代码的安全性。 使用Grunt的步骤如下:1.安装:... 查看详情

grunt入门

...nt对JS文件的检测,以及js和css文件的合并,压缩,是前端自动化压缩构建项目的得力助手。接下来就随lizimeme一起学习grunt的基本使用  我的电脑安装了nodejs,自动全局安装了npm(npm是随同NodeJS一起安装的包管理工具)第一步... 查看详情

gulp(代码片段)

...ystemgulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,不仅可以很愉快的编写代码,而且大大... 查看详情

剖析grunt任务配置

之前博客中大致描述过“前端自动化构建工具Grunt”及“grunt[mismatched:define]”等信息。然而,并没有深入;下述内容,将深入剖析GruntFiles处理方式、配置项、自定义插件。一、准备工作A.通过npminit在项目根目录下生成package.json;... 查看详情

为什么在npm中使用插件的对等依赖?(代码片段)

...例我正在使用AppGyverSteroids,它使用Grunt任务将我的源文件构建到/dist/文件夹中,以便在本地设备上提供。我在npm和grunt都很新,所以我想完全理解发生了什么。到目前为止我得到了这个:[rootfolder]/package.json告诉npm它依赖于用于开... 查看详情

转载grunt整合版30分钟学会使用grunt打包前端代码

...整合版】30分钟学会使用grunt打包前端代码grunt是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:①压缩文件②合并文件③简单语法检查对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩、合并文件,... 查看详情

grunt与seajs结合应用

9.seajs构建的问题01.png和02.jpg 10.seajs与grunt如何结合开发。两个插件:grunt-cmd-transportgrunt-cmd-contact,去grunt官网上查并下载03.png将代码暂存到.build的文件中,执行任务后,则自动提取出依赖。然后再将这些依赖文件进行打包或者... 查看详情