grunt 上手
grunt 上手
开始上手
Grunt 和 grunt 插件都是通过 npm 安装, Node.js 包管理器管理的。
Grunt 0.4.x 版本需要Node.js 版本号不低于0.8.0。
一.安装CLI
为了顺利开始,你将需要全局安装Grunt命令行界面CLI。你可能需要使用sudo(for OSX, *nix, BSD etc)或者作为一个管理员运行你的命令行。
npm install -g grunt-cli
这样呢,就可以把grunt命令放到系统路径,允许你在任何目录运行。
注意,安装grunt-cli 并不是安装了grunt 任务运行器。 grunt CLI的职责很简单:运行grunt版本(which has been installed next to a Gruntfile,这句修饰“版本”怎么翻译?)。它允许多种版本的grunt同时安装在同一台机器上。
二.CLI是如何工作的
每一次运行grunt,它都会寻找本地的grunt(using node's require() system)安装。正因如此,你才可以在你的项目任何子文件夹里运行grunt。
如果本地的grunt安装找到了,CLI加载来自grunt库的本地安装,依照Gruntfile进行配置,并执行你已经请求的任务。
想明白到底是怎么执行的,read the code ,很短的哦。
三.基于现有的grunt 项目工作
假如你已经安装了Grunt CLI,并且对项目配置了package.json 和 Gruntfile.js,那么接下来就很容易来使用Grunt工作啦:
- 切换到项目根目录
- 使用 npm install 安装项目依赖
- 运行 grunt 命令
四.准备一个新的grunt 项目
通常需要添加这两个文件到你的工程:package.json 和 Gruntfile.js
package.json:作为npm的模块,这个文件是npm用来为发布的项目来保存 metadata的。 你可以在这个文件的devDependencies 中配置项目需要的grunt和grunt插件。
Gruntfile: 通常被命名为Gruntfile.js 或者 Gruntfile.coffee,用来配置或者定义任务,加载Grunt 插件。
五.package.json
package.json文件需要放置在你的项目根目录,它与Gruntfile文件位置一样,会随项目资源一起提交。运行 npm install 命令将会安装其配置的所有依赖版本。
这里有几种方式用来为你的项目创建 package.json 文件:
- 大多数的 grunt-init 模板将会自动创建一个项目指定的 package.json文件
- npm init 命令将会创建一个基本的 package.json文件
- 创建类似如下的package.json文件:

{"name":"my-project-name","version":"0.1.0","devDependencies":{"grunt":"~0.4.1","grunt-contrib-jshint":"~0.6.0","grunt-contrib-nodeunit":"~0.2.0","grunt-contrib-uglify":"~0.2.2"}}
六.安装grunt和grunt插件
如果已经有了package.json文件,那么运行 npm install <module> --save-dev 命令。
这个命令不仅仅是安装了 <module> ,也会自动将 tilde version range 添加到 devDependencies 。
比如,下面的这个例子将会安装最近的Grunt到你的项目文件里,同时也会添加到devDependencies:
npm install grunt --save-dev
对于grunt 插件和其它的node 模块也是如此。请确保你完成这些后,将更新的package.json随同你的项目一起提交。
七.Gruntfile
同package.json一样,置于项目根目录,是个Gruntfile.js或者Gruntfile.coffee文件,随同项目一起提交。
一个Gruntfile应当包含如下几部分:
- 包装器函数
- 项目和任务配置
- 加载 grunt 插件和任务
- 定义任务
Gruntfile示例:
如下的Gruntfile中,项目metadata从package.json中被导入到了grunt 配置里。grunt-contrib-uglify 插件的 uglify 任务被配置用来压缩源文件,并通过metadata信息动态生成banner comment。当grunt命令运行后,uglify任务将自动执行。

module.exports =function(grunt){// Project configuration. grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify:{
options:{
banner:'/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'},
build:{
src:'src/<%= pkg.name %>.js',
dest:'build/<%= pkg.name %>.min.js'}}});// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-uglify');// Default task(s).
grunt.registerTask('default',['uglify']);};

现在,让我们看看Gruntfile的组成部分吧。
包装器函数:
任何的Gruntfile(包括grunt插件)都使用这个基本的格式,你所有的Grunt 代码必须在这个函数里面进行说明:
module.exports =function(grunt){// Do grunt-related things in here};
项目和任务配置
多数的Grunt 任务依赖配置数据都是通过grunt.initConfig 这个方法来定义的。
在这个示例中,grunt.file.readJSON('package.json')把存储在packag.json中的json metadata数据导入到了grunt配置中。因为 <% %> 模板字符串可能涉及任何配置属性,配置数据,比如文件路径,文件列表,通过此方式可以减少重复声明。
你或许可以存储任意的数据在这个配置对象里,你爱咋咋地吧。
和大多数的任务一样,grunt-contrib-uglify 插件的 uglify 任务期望它的配置被指定在同名属性中。此处,banner 选项和单一的uglify 目标build同时被指定(specified,翻译成啥好呢,说明?),build是用来缩减源文件到指定的文件。

// Project configuration.grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify:{
options:{
banner:'/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'},
build:{
src:'src/<%= pkg.name %>.js',
dest:'build/<%= pkg.name %>.min.js'}}});

加载grunt插件和任务
老外真他妈啰嗦,不就是类似下面这段执行命令么:
// Load the plugin that provides the "uglify" task.
grunt.loadNpmTasks('grunt-contrib-uglify');
定制任务
你可以通过定义default任务,让Grunt运行更多的任务。如下的示例,运行 grunt 命令行将会运行 uglify 任务。它等同于 grunt ugligy 或者 grunt default 命令行。任务配置都可以放在这个指定的数组中。
// Default task(s).
grunt.registerTask('default',['uglify']);
如果你的任务需求Grunt 插件没有提供,你可以自己在Gruntfile中定义任务。例如,这个Gruntfile定义了一个完整的定制任务 default ,它甚至不需要任何任务配置。

module.exports =function(grunt){// A very basic default task.
grunt.registerTask('default','Log some stuff.',function(){
grunt.log.write('Logging some stuff...').ok();});};

定制任务并不需要定义Gruntfile,可以通过定义额外的js文件并通过 grunt.loadTasks 方法加载。
-------------------------------------------------
grunt 上手的更多相关文章
- Grunt上手指南<转>
原文链接:http://www.hulufei.com/post/grunt-introduction 安装 如果之前有装过grunt,卸载之 npm uninstall -g grunt 安装gru ...
- Grunt上手指南(转)
Grunt , javascript 我想先花点时间回忆一下作为一个前端需要做的工作(Loading...) JS合并 JS压缩 CSS压缩 CSS Sprite 图片优化 测试 静态资源缓存(版本 ...
- grunt 入门学习
前端工作流,Grunt上手指南 Posted@2013-04-20 7:15 a.m. CategoriesGrunt , javascript 我想先花点时间回忆一下作为一个前端需要做的工作(Lo ...
- 【转】自动化任务运行器 Grunt 迅速上手
原文转自:http://blog.jobbole.com/51586/ 这篇文章将带领你用Grunt来提速和优化网站开发的流程.首先我们会简短介绍Grunt的功能,然后我们直接上手,介绍如何用Grun ...
- (绝对官方好用,快速上手)针对grunt之前写的那篇有些乱,这次总结个清晰的
安装 Grunt基于Node.js,安装之前要先安装Node.js,然后运行下面的命令. sudo npm install grunt-cli -g grunt-cli表示安装的是grunt的命令行界 ...
- Grunt.js 上手
Official Site gruntjs.org/docs/getting-started.html 或者看http://tgideas.qq.com/webplat/info/news_versi ...
- Grunt 5分钟上手:合并+压缩前端代码
Grunt 的各种优点这里就不扯了,对于 新手来说 合并(concat) + 压缩(uglify) 前端代码的需求量应该是最大的,这里以这俩种功能为主做一个5分钟的入门吧! 工作环境 $ node - ...
- 是时候搁置Grunt,耍一耍gulp了
也算是用了半年Grunt,几个月前也写过一篇它的入门文章(点此查看),不得不说它是前端项目的一个得力助手.不过技术工具跟语言一样日新月异,总会有更好用的新的东西把旧的拍死在沙滩上(当然Grunt肯定没 ...
- Grunt 安装与配置环境
当时学习 Grunt 的时候,真是很头疼.分了两个时间段,学习了两次才硬啃下来,之后才能用在项目中.主要原因我认为是学习资料和文档上面写的太高端了.这类的文档或者资料有个显著特点,上来先简单介绍一下这 ...
随机推荐
- linux Packet socket (1)简单介绍
本文主要来自于linux自带的man packet手冊: http://man7.org/linux/man-pages/man7/packet.7.html 平时常常使用的INET套接字提供的是7层 ...
- Middleware开发入门
Middleware开发入门 上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介 ...
- 浅谈移动Web开发(上):深入概念
PPI 什么是PPI PPI的复杂之处在于如果他所属的上下文环境不同,意义也会完全不一样. 当我们在谈论显示设备的PPI时,它代指的屏幕的像素密度:当我们在谈论和图片相关时,我们谈论的是打印时的分辨率 ...
- jQuery多文件
jQuery多文件下载 文件下载是一个Web中非常常用的功能,不过你是做内部管理系统还是做面向公众的互联网公司都会遇到这个问题,对于下载一般有点实际开发经验的都会自己解决,上周弄了一下多文件下载,业务 ...
- C++多线程分析
我们开始谈论的线程之前先看看这些线载波前-进程. 进程,它是一个正在执行的程序的实例.是一个程序在其自身的地址空间的一次执行活动.进程是资源申请.调度.和独立执行的基本单位.进程有两部分组成: 1.操 ...
- Mybatis包分页查询java公共类
Mybatis包分页查询java公共类 分页----对于数据量非常大的查询中.是不可缺少的. mybatis底层的分页sql语句因为须要我们自己去手动写.而实现分页显示的时候我们须要依据分页查询条 ...
- 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨) ...
- PHP 17: MySQL的简单介绍
原文:PHP 17: MySQL的简单介绍 这一章将简单介绍MySQL的基本知识. 本文来自http://lib.hackbase.com/html/8/35125.htm. MySQL是最受欢迎的开 ...
- PHP 3:从Login界面谈PHP标记
原文:PHP 3:从Login界面谈PHP标记 前一篇文章简要介绍了此实例.OK,我们就从第一个页面Login页面入手吧.还是看看界面怎么样,是不是很想指导它到底是如何实现的呢?好的,看看其代码吧: ...
- 使用winform控件注意线程绘制界面冲突
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...