使用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 相关文章推荐
js比较和逻辑运算符的介绍
Mar 10 Javascript
js清理Word格式示例代码
Feb 13 Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
Nov 28 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
Jul 04 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
Aug 29 Javascript
利用JS实现文字的聚合动画效果
Jan 22 Javascript
axios学习教程全攻略
Mar 26 Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 Javascript
详解Vue.js 响应接口
Jul 04 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 调用远程url的六种方法小结
2009/11/02 PHP
浅谈php扩展imagick
2014/06/02 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
PHP 正则表达式小结
2015/02/12 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
angularjs下拉框空白的解决办法
2017/06/20 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
Python字符遍历的艺术
2008/09/06 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
python ubplot使用方法解析
2020/01/10 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
你们项目是如何进行变更控制的
2015/08/26 面试题
幼儿园家长会邀请函
2014/01/15 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
银行转正自我鉴定
2014/09/29 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
永不妥协观后感
2015/06/10 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL