使用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 相关文章推荐
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
javascript动态加载三
Aug 22 Javascript
JS获取当前日期和时间的简单实例
Nov 19 Javascript
js取模(求余数)隔行变色
May 15 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
May 19 Javascript
js小数运算出现多位小数如何解决
Oct 08 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
Dec 10 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
Aug 01 Javascript
JS获取短信验证码倒计时的实现代码
May 22 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
Sep 20 Javascript
ES6知识点整理之Proxy的应用实例详解
Apr 16 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 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
php判断访问IP的方法
2015/06/19 PHP
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
python获取本地计算机名字的方法
2015/04/29 Python
Django自定义认证方式用法示例
2017/06/23 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
python实现连连看游戏
2020/02/14 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
医学类导师推荐信范文
2013/11/19 职场文书
项目施工员岗位职责
2014/03/09 职场文书
办公室主任个人总结
2015/02/28 职场文书
廉洁自律证明
2015/06/24 职场文书
python如何在word中存储本地图片
2021/04/07 Python
分享python函数常见关键字
2022/04/26 Python