我是靠谱客的博主 懦弱御姐,最近开发中收集的这篇文章主要介绍前端自动化工具Grunt的使用一、什么是Grunt二、Grunt的使用三、测试Grunt,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、什么是Grunt

Grunt 是一个基于任务的JavaScript工程命令行构建工具。
上面这句看起来可能还不足以了解Grunt,下面举个例子:
*我们的前端代码有非常多的js文件,这些文件在最后发布版本的时候,往往希望能将他们压缩后再发布,因为压缩后的js文件在网络传输时能减少流量,加快访问速度,这时候Grunt就派上用场了,Grunt中的Uglify插件,可以很轻松的帮助我们实现js文件的压缩。
*有时候几个js文件可以合并到一起减少网络请求的次数,这时候Grunt中的concat插件就应运而生了。
*当某个js文件被修改了,怎么知道有没有语法错误呢?Grunt中的watch插件和jshint插件,就可以帮助我们监控某个js文件是否被修改,如果被修改了,可以马上审查它的代码有没有有语法错误,有错误的话,会马上显示出来。
上面举的3个例子应该足以说明什么是Grunt了吧,当然。Grunt有很多的插件可以帮助我们自动完成一些事情,上面只是举了4个插件例子而已

二、Grunt的使用

要使用Grunt和Grunt插件,我们需要使用npm命令,所以需要先安装Nodejs,这里假设Nodejs已经安装完毕,使用下面的命令可以安装Grunt:
npm install -g grunt-cli
安装完毕后,我们新建一个项目,用来测试Grunt的使用方法。
(1)在桌面新建目录TestGrunt,并在TestGrunt目录中新建两个文件:package.json和Gruntfile.js,其中:
package.json: 此文件被npm用于存储项目的元数据,以便将此项目发布为npm模块。你可以在此文件中列出项目依赖的grunt和Grunt插件,放置于devDependencies配置段内。
Gruntfile: 此文件被命名为 Gruntfile.js 或 Gruntfile.coffee,用来配置或定义任务(task)并加载Grunt插件的。 此文档中提到的 Gruntfile 其实说的是一个文件,文件名是 Gruntfile.js 或 Gruntfile.coffee。
下面放上package.json的代码:
{
  "name": "TestGrunt",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-contrib-concat": "^1.0.1",
    "grunt-contrib-jshint": "^0.12.0",
    "grunt-contrib-uglify": "^0.5.1",
    "grunt-contrib-watch": "^1.0.0"
  }
}
上面的代码中,name指定了项目的名称,version指定了项目的版本,devDependencices指定了Grunt插件。
(2)使用npm安装插件。插件除了需要在package.json中声明外,还需要通过npm命令来进行安装,命令格式为:
npm install <module> --save-dev
由于本文的例子里使用到了4个Grunt插件,所以我们需要在命令行下依次执行下面4条命令:
npm install grunt-contrib-jshint --save-dev
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-watch --save-dev
npm install grunt-contrib-uglify --save-dev
(3)编写Gruntfile文件。上面两步准备工作做好了,就开始真正的重任了,由于Grunt是以任务的形式来为我们自动完成某些工作的,所以在Gruntfile中,我们需要配置任务,下面先上Gruntfile的代码,然后再一一说明:
module.exports = function(grunt) {

  // 项目配置
  grunt.initConfig({
    //从package.json中读取配置
    pkg: grunt.file.readJSON('package.json'),
    //压缩任务
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */n'
      },
      build: {
        src: 'src/<%= pkg.name %>.js',
        dest: 'build/<%= pkg.name %>.min.js'
      }
    },
    //代码提示
    jshint: {
      files: ['src/TestGrunt.js'],
      reportOutput: ''
    },
    //文件监视
    watch: {
      files: ['src/<%= pkg.name %>.js'],
      tasks: ['jshint']
    },
    //文件合并
    concat: {
      dist: {
        src: ['src/a.js', 'src/b.js'],
        dest: 'build/ab.js'
      }
    }
  });

  // 加载插件。
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-concat');

  // 默认被执行的任务列表。
  grunt.registerTask('default', ['uglify', 'watch', 'jshint', 'concat']);

};
上面的Gruntfile代码中,配置了4个任务,下面依次说明:
(1)
module.exports = function(grunt) {
  // Do grunt-related things in here
};
这句代码是每一份Gruntfile都必须遵循的格式,所有的任务配置都必须放在上面的函数内部
(2)
pkg: grunt.file.readJSON('package.json'),
这句代码表示grunt需要从package.json中读取一些配置文件,这里的package.json就是我们在项目根目录下创建的那个package.json文件
(3)压缩任务:
uglify: {
  options: {
    banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */n'
  },
  build: {
    src: 'src/<%= pkg.name %>.js',
    dest: 'build/<%= pkg.name %>.min.js'
  }
},
上面的代码配置了压缩任务,其中option指定了压缩任务的一些选项,这里配置的banner会在压缩后的文件头部显示出来。build中配置了src和dest两个属性,src指定了被压缩文件的路径,<%= pkg.name%>为字符串模板,实际运行grunt任务时,这部分将会被替换成pkg.name代表的字符串,而pkg.name即我们在package.json中配置的name属性。
(4)语法提示任务:
jshint: {
  files: ['src/TestGrunt.js'],
},
这段代码配置的是代码提示任务,即检查并提示src/TestGrunt.js文件的语法错误
(5)文件内容监控任务:
watch: {
  files: ['src/<%= pkg.name %>.js'],
  tasks: ['jshint']
},
这段代码配置的是文件监控任务,当files中指定的js文件内容发生变化时,就会自动运行tasks指定的任务,这里的tasks指定了jshint任务,则TestGrunt.js文件内容发生改变后,就会自动检查TestGrunt.js文件的语法是否有误。
(6)文件合并任务:
concat: {
  dist: {
    src: ['src/a.js', 'src/b.js'],
    dest: 'build/ab.js'
  }
}
这段代码配置的是文件合并任务,src数组指定哪些文件需要合并,dest指定的是合并后的文件路径。
(7)加载插件:
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
前面几步配置好任务后,需要使用上面的代码将插件加载进来,需要注意的是,这里加载的插件,要确保我们已经使用npm命令将其安装了,如果是没有安装的插件,加载肯定不会成功的。
(8)注册任务:
grunt.registerTask('default', ['uglify', 'watch', 'jshint', 'concat']);
上面这句代码注册了一个默认的任务数组,该任务数组包含了4个任务,当我们在命令行下执行grunt命令时,如果没有指定任务名称,则这里的默认的任务会被执行,如果我们在grunt命令后带了任务名称,则会执行指定的任务,比如下面的命令:
grunt concat
则会只执行concat任务。

三、测试Grunt

上面的步骤完了之后,基本上就可以测试Grunt的威力了,为了测试Grunt的能力,我们还需要给TestGrunt项目加上一些测试用的js文件,在TestGrunt目录下新建src目录,然后在src目录下新建3个js文件分别如下:
a.js:
function a() {
	alert("a");
}
b.js:
function b() {
	console.log("b");
}
TestGrunt.js:
function test() {
	console.log("Hello World!");
	console.log("helloworld");
	console.error("error!")
}
OK了,下面就可以测试Grunt的插件是否运行正常了,我们在命令行下进入TestGrunt目录,然后执行grunt concat命令,如下图所示:


可以看到,命令执行成功了,而且在TestGrunt目录下,自动生成了build目录,build目录下出现了ab.js文件,文件内容为:
function a() {
	alert("a");
}
function b() {
	console.log("b");
}
这样一来,就证明concat插件正常工作了,而且将a.js和b.js成功合并成了一个文件ab.js。
下面在命令行中执行grunt uglify命令,如下图所示:

然后在build目录下,可以看到生成了TestGrunt.min.js文件,文件内容如下:
/*! TestGrunt 2016-08-17 */
function test(){console.log("Hello World!"),console.log("helloworld"),console.error("error!")}
这就表明代码压缩插件uglify已经正常运行并生成了压缩后的文件。
下面在命令行下执行grunt watch命令,如下图所示:

可以看到命令行出现Waiting...字样,接下来我们打开项目src目录中的TestGrunt.js文件,并修改代码如下:
function test() {
	console.log("Hello World!");
	console.log("helloworld");
	console.error("error!")
	alert()
}
修改完代码后,我们保存文件,然后来到命令行下,发现命令行下多了一些内容,如下图所示:

这里我们可以发现,命令行中提示了TestGrunt.js文件中的两处错误,这就表明Grunt插件watch和jshint正常运行了,因为我们修改了TestGrunt.js文件,所以插件watch的任务被执行,而在上面的Gruntfile中我们配置的是,文件改变后就执行jshint任务,所以在命令行下才会出现错误提示。这里需要注意的是,修改了TestGrunt.js文件后,只有保存文文件后watch才能监控到文件的改变。

上面就是Grunt4个插件:concat、uglify、jshint、watch的使用,当然,这里只是一个简单的使用demo,实际这几个插件还有很多配置项,可以参考Grunt官方文档: http://www.gruntjs.net/getting-started

Grunt常用插件整理: http://www.jianshu.com/p/2d5249914460

本文的demo代码已上传,点击这里下载
















最后

以上就是懦弱御姐为你收集整理的前端自动化工具Grunt的使用一、什么是Grunt二、Grunt的使用三、测试Grunt的全部内容,希望文章能够帮你解决前端自动化工具Grunt的使用一、什么是Grunt二、Grunt的使用三、测试Grunt所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部