使用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 相关文章推荐
javascipt基础内容--需要注意的细节
Apr 10 Javascript
JS动态获取当前时间,并写到特定的区域
May 03 Javascript
javascript日期格式化示例分享
Mar 05 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
javascript创建对象的几种模式介绍
May 06 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 Javascript
js禁止浏览器的回退事件
Apr 20 Javascript
原生js 封装get ,post, delete 请求的实例
Aug 11 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
Jun 19 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
Jul 18 Javascript
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
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生成WAP页面
2006/10/09 PHP
PHP 开发工具
2006/12/06 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
js表单登陆验证示例
2016/10/19 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python实现随机漫步功能
2018/07/09 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python sqlite的Row对象操作示例
2019/09/11 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
百丽国际旗下购物网站:优购
2017/02/28 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
小学开学寄语
2014/01/19 职场文书
医务人员自我评价
2014/01/26 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
Win11查看设备管理器
2022/04/19 数码科技