使用Grunt.js管理你项目的应用说明


Posted in Javascript onApril 24, 2013

Grunt.js是什么?
Grunt.js是一个Javascript Task Runner(Javascript任务运行器),其基于NodeJS,可用于自动化构建、测试、生成文档的项目管理工具。

Grunt.js并不是仅仅是构建工具,实际上他只是任务运行器,管理每个子任务的自动化运行,我们还能使用他做更多东西。
 

为什么使用Grunt.js?
简单的说:为了自动化。
对于前端项目,例如:

•为了明确模块分工,我们可能会将Javascript代码拆成很小很小的一个个js文件,但是我们知道,在最终页面上,我们知道过多的js文件会产生过多的Http Request,这不利于页面优化。所以我们可能希望可以合并这些js文件的工具。
•为了用户端请求的文件尽量小,我们希望我们的HTML、Javascript等文件能进行压缩。
•我们可能需要对源代码进行一些单元测试和回归测试。
•我们可能希望有工具能够通过源代码备注自动生成文档,免得手动再写文档。
•……
很明显,这一切都有各种各样的小工具能帮我们做到,但是我们希望最好能输入一个命令,打开一个程序,或者干脆每次修改文件保存后自动进行这一切事情。

以前我们可能使用NodeJS自己写一个build程序,但是现在Grunt.js能够提供我们需要的一切。

安装Grunt.js
Grunt.js 0.4之后,其不再使用全局方式安装整个Grunt.js,而是在全局安装Grunt.js Client,然后在当前项目中安装Grunt,来避免未来不同项目对Grunt不同版本的依赖关系。

如果安装了之前的版本,可以使用npm的命令来删除掉原来的Grunt.js。

npm uninstall -g grunt
然后安装Grunt.js Client:

npm install -g grunt-cli
 

package.json
package.json是项目的配置文件,有一些项目的依赖信息,以及作者、版本等信息。我们先写一个简单的package.json。

{
  "name": "my-project",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1"
  }
}

name属性,表示该项的名字。

version属性,则是该项目的版本号。

devDependencies属性,则包含该项目的依赖,目前我们的依赖只有grunt,以及版本为0.4.1。
在终端大概包含该package.json的目录,输入命令:

npm install
我们会发现,该目录此时多了一个node_modules文件夹,里面有个grunt文件夹,这个就是我们安装在项目的Grunt.js。

用Grunt.js进行压缩js代码
grunt-contrib-uglify是Grunt.js的一个任务模块,其基于著名的js压缩工具uglify,进行js压缩任务。

首先我们在项目依赖加上grunt-contrib-uglify,package.json如下:

{
  "name": "my-project",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-uglify": "~0.2.0"
  }
}

再使用:

npm install
我们就安装了grunt-contrib-uglify了。

写Gruntfile.js

module.exports = function(grunt) {
    // 给grunt添加些设置
    grunt.initConfig({
        uglify: {
            options: {
                banner: '/*! 版权所有,这里乱写 */\n'
            },
            build: {
                src: 'src/core.js', //要压缩的源文件,我们也可以用*表示通配,比如'src/*.js'
                dest: 'dst/core.js' //压缩后输出的位置
            }
        }
    });
    // 载入 "uglify" 插件任务
    grunt.loadNpmTasks('grunt-contrib-uglify');
    // 定义默认需要执行的任务
    grunt.registerTask('default', ['uglify']);
};

Gruntfile.js文件用于定义任务,以及任务组的执行顺序等。上面的文件我们定义将src/core.js文件压缩后输出成dst/core.js。则我们输入命令:

grunt
的时候,则会自动完成这个任务。

Javascript 相关文章推荐
Prototype 学习 Prototype对象
Jul 12 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
setTimeout内不支持jquery的选择器的解决方案
Apr 28 Javascript
js实现的四级左侧网站分类菜单实例
May 06 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
Jan 13 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
Apr 11 Javascript
Jquery-data的三种用法
Apr 18 jQuery
vue项目在webpack2实现移动端字体自适配功能
Jun 02 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
Apr 24 #Javascript
jQuery文本框(input textare)事件绑定方法教程
Apr 24 #Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
Apr 24 #Javascript
Dom 学习总结以及实例的使用介绍
Apr 24 #Javascript
jQuery 关于伪类选择符的使用说明
Apr 24 #Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 #Javascript
Jquery实现三层遍历删除功能代码
Apr 23 #Javascript
You might like
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
Python批量查询域名是否被注册过
2017/06/21 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
Python tkinter实现日期选择器
2021/02/22 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
北京大学自荐信范文
2014/01/28 职场文书
学生党员公开承诺书
2014/05/28 职场文书
家长给老师的感谢信
2015/01/20 职场文书
大学毕业生自我评价
2015/03/02 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
基于Python实现将列表数据生成折线图
2022/03/23 Python
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS