关键词:
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的文件中,执行任务后,则自动提取出依赖。然后再将这些依赖文件进行打包或者... 查看详情