使用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 相关文章推荐
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
一个javascript图片阅览组件
Nov 09 Javascript
firebug的一个有趣现象介绍
Nov 30 Javascript
jsPDF生成pdf后在网页展示实例
Jan 16 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
Jan 26 Javascript
谈谈因Vue.js引发关于getter和setter的思考
Dec 02 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
Apr 24 Javascript
React项目动态设置title标题的方法示例
Sep 26 Javascript
vue调试工具vue-devtools安装及使用方法
Nov 07 Javascript
vue实现动态按钮功能
May 13 Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 Javascript
如何将Node.js中的回调转换为Promise
Nov 10 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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
jQuery最佳实践完整篇
2011/08/20 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
python实现简单图书管理系统
2019/11/22 Python
用python实现学生管理系统
2020/07/24 Python
python中字典增加和删除使用方法
2020/09/30 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
安全大检查反思材料
2014/01/31 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
驳回起诉裁定书
2015/05/19 职场文书
商标侵权律师函
2015/05/27 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL
python开发人人对战的五子棋小游戏
2022/05/02 Python