前端自动化工具Grunt的使用
来源:互联网 发布:程序员直播赚钱 编辑:程序博客网 时间:2024/05/16 23:02
一、什么是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: 此文件被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-devnpm install grunt-contrib-concat --save-devnpm install grunt-contrib-watch --save-devnpm 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代码已上传,点击这里下载
1 0
- 前端自动化工具Grunt的使用
- 前端自动化工具grunt的使用
- 前端自动化工具grunt
- Grunt前端自动化工具
- 前端自动化构建工具Grunt
- grunt-beginner 前端自动化工具
- Grunt-beginner前端自动化工具
- 前端自动化工具grunt介绍
- 【Grunt】前端自动化构建工具
- 前端自动化构建工具Grunt
- grunt 前端自动化构建工具
- javascript前端工具------自动化构建工具Grunt
- 一步一步学习安装Grunt前端自动化工具
- Grunt自动化web前端开发环境工具
- Gulp.js—比Grunt更易用的前端构建工具-前端自动化
- 前端自动化Grunt教程
- Grunt教程-前端自动化
- Grunt教程-前端自动化
- POJ 2137 Cowties DP
- 采用shc工具加密Shell脚本
- DG备库delay设置备库延时apply archivelog 但不延时传送归archivelog
- 小白程序北漂一周年
- 生成mif文件
- 前端自动化工具Grunt的使用
- Android群英传-自定义View、控件
- Data truncation: Incorrect datetime value: '' for column 'create_date' at row 1
- Oracle视图(View)创建使用
- 周记2016.7
- 如何构建你自己的 Git 服务器
- Xcode 如何使用旧版本SDK以保证程序兼容性
- tjut 3065
- Pycharm 使用大全