菜鸟进阶——grunt

为保证作者版权在此声明本文部分摘自

http://yujiangshui.com/grunt-basic-tutorial/

另,参考文章

http://www.tuicool.com/articles/yABV73

及官方英文文档

http://gruntjs.com/plugins

开始学习 Grunt

它就是一个工具框架,有很多插件扩展它的功能。

是一套前端自动化工具,基于nodeJS的命令行工具,一般用于:

① 压缩文件

②合并文件

③简单语法检查

Grunt 基于 Node.js ,用 JS 开发,这样就可以借助 Node.js 实现跨系统跨平台的桌面端的操作,例如文件操作等等。此外,Grunt 以及它的插件们,都作为一个 包 ,可以用 NPM 安装进行管理。

所以 NPM 生成的 package.json 项目文件,里面可以记录当前项目中用到的 Grunt 插件,而 Grunt 会调用 Gruntfile.js 这个文件,解析里面的任务(task)并执行相应操作。

如果你对 Node.js、NPM 这些名词不太熟悉,建议先去搜索了解一下,因为下面的命令会涉及到它们,但是本文不会过多介绍。

安装 Grunt

Grunt 依赖 Node.js 所以在安装之前确保你安装了 Node.js。(可在官网上下载)然后开始安装 Grunt。

实际上,安装的并不是 Grunt,而是 Grunt-cli,也就是命令行的 Grunt,这样你就可以使用 grunt 命令来执行某个项目中的 Gruntfile.js 中定义的 task 。但是要注意,Grunt-cli 只是一个命令行工具,用来执行,而不是 Grunt 这个工具本身。

安装 Grunt-cli 需要使用 NPM,使用下面一行即可在全局范围安装 Grunt-cli ,换句话说,就是你可以在任何地方执行 grunt 命令:

npm install -g grunt-cli

需要注意,因为使用 -g 命令会安装到全局,可能会涉及到系统敏感目录,如果用 Windows 的话,可能需要你用管理员权限,如果用 OS X / Linux 的话,你可能需要加上 sudo 命令。

下面我们新建一个项目目录,并新建一些文件,这里我准备了一份很简单的项目,放在了 Github 上,下面操作将以此来操作,你可以下载或者 clone 下来: https://github.com/yujiangshui/gruntxx

生成 package.json 文件

这个 package.json 文件其实是 Node.js 来描述一个项目的文件,JSON 格式。生成这个文件超级简单,推荐用命令行交互式的生成一下:

打开命令行,cd gruntxx 文件夹下面,输入指令 npm init 之后,就出来很多信息,然后开始填写项目名称,填写好了之后回车即可。其实这里你一路回车下去也无妨,但是建议你细细的填一下,不明白的跳过好了。

填写好了之后,查看目录就会发现生成 package.json 文件了,这样就算生成好了。

其实就是一个文件而已,你觉得这种方式麻烦,完全可以新建一个文件,然后将类似下面的代码复制进去,改一下对应选项,保存成 package.json 文件就可以:

{ "name": "my-project-name", "version": "0.1.0", "devDependencies": { } }

最后我生成的代码如下:

但这时我们还没有在项目文件中安装 Grunt 以及相关任务插件。

安装 Grunt 和所需要的插件

就现在的这个示例项目而言,我打算让 Grunt 帮忙实现下面几个功能:检查每个 JS 文件语法、合并两个 JS 文件、将合并后的 JS 文件压缩、将 SCSS 文件编译、新建一个本地服务器监听文件变动自动刷新 HTML 文件。

差不多就是这些,根据这些任务需求,需要用到:

它们的命名和文档都很规范,因为这些是官方提供的比较常用的插件。这些插件同时都是 NPM 管理的包,比如 grunt-contrib-concat - npm 你也可以在这上面看到用法等。

下面我们就要在这个项目中安装这些插件,执行命令:

npm install grunt --save-dev

表示通过 npm 安装了 grunt 到当前项目,同时加上了 —save-dev 参数,表示会把刚安装的东西添加到 package.json 文件中。不信你打开 package.json 文件看下,是不是多了

"devDependencies": { "grunt": "^0.4.5" }

没错,这个的意思就是当前项目依赖 grunt,后面是它的版本,咱们不用管。如果安装的时候没有添加 —save-dev 参数,这里就不会出现了,你需要自行添加上去。

下面我们来安装 Grunt 的插件,当然,不需要一个个的安装,太麻烦了,我们可以:

npm install --save-dev grunt-contrib-concat grunt-contrib-jshint grunt-contrib-sass grunt-contrib-uglify grunt-contrib-watch grunt-contrib-connect

等待一大串乱七八糟的下载状态,我们把 grunt 和相关插件都安装好了,不信看下是不是多了一个 node_modules 文件夹?打开看下,里面就是咱们刚安装的插件。

配置 Gruntfile.js 的语法

插件也装好了,开始写任务吧!既然是要程序来读取执行,必要要有一定的语法规范,下面来简单的说一下:

首先要明白,这是一个 JS 文件,你可以写任意的 JS 代码,比如声明一个 对象 来存储一会要写任务的参数,或者是一个变量当作开关等等。

然后,所有的代码要包裹在

module.exports = function(grunt) { ... };

里面。没有为什么。

在这里面的代码,除去你自己写的乱七八糟的 JS,与 Grunt 有关的主要有三块代码:任务配置代码插件加载代码任务注册代码

顾名思义,这三块代码,任务配置代码就是调用插件配置一下要执行的任务和实现的功能,插件加载代码就是把需要用到的插件加载进来,任务注册代码就是注册一个 task,里面包含刚在前面编写的任务配置代码。

这样,就可以用 grunt 来执行注册的一个 task 从而根据任务配置代码调用需要的插件来执行相应的操作。

下面来分别看一下这三块代码的写法。

任务配置代码

例如下面代码:

可以看出,具体的任务配置代码以对象格式放在 grunt.initConfig 函数里面,其中先写了一句 pkg: grunt.file.readJSON(‘package.json‘) 功能是读取 package.json 文件,并把里面的信息获取出来,方便在后面任务中应用(例如下面就用了

时间: 2024-10-13 22:30:19

菜鸟进阶——grunt的相关文章

【Java】Java网络编程菜鸟进阶:TCP和套接字入门

Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)这两个数据传输协议的支持.本文开始探讨 TCP. TCP 基础知识 在“服务器-客户端”这种架构中,服务器和客户端各自维护一个端点,两个端点需要通过网络进行数据交换.TCP 为这种需求提供了一种可靠的流式连接,流式的意思是传出和收到的数据都是连续的字节,没有对数据量进行大小限制.

js菜鸟进阶-jQuery源码分析(1)-基本架构

导读: 本人JS菜鸟一枚,为加强代码美观和编程思想.所以来研究下jQuery,有需要进阶JS的同学很适合阅读此文!我是边看代码(jquery2.2.1),边翻“javascript高级程序设计”写的,有很多基本知识点我都写了书本对应的章节.有分析得不好的还请各位多多指教,更正! 希望我的分析对大家有所帮助,谢谢! 一.代码构成 (function(global, factory){ if ( typeof module === "object" && typeof mo

菜鸟进阶之Android Touch事件传递(二)

这是touch事件传递系列博客的第二篇,如果想了解touch和click的那些事,请浏览投产事件传递系列的第一篇.http://blog.csdn.net/bingospunky/article/details/43603397 理理思路,我发现touch传递这部分的内容很多,所以每篇博客介绍一个方面比较好.这篇博客主要介绍touch事件传递的现象,一个简单的demo,让大家可以看到touch一步一步传递的过程.下篇博客中在研究源码是怎么实现的.再后面的博客会试图改变这篇文章看到的touch的传

菜鸟进阶之Android Touch事件传递(三)

费了这么大劲,终于写完了,这是我的原创.转载请说明出处:http://blog.csdn.net/bingospunky/article/details/44156771 这是touch传递系列文章的第三篇,我打算在这篇文章里从源码的角度解释dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent方法的返回值影响touch传递的原理. 如果想了解touch和click的那些事,请浏览touch事件传递系列的第一篇http://blog.csdn.

菜鸟进阶Linux高手之路——第五天(下)

/mnt:额外的临时文件系统 /opt:可选目录,第三方程序的安装目录 /proc:伪文件系统,内核映射文件(系统调优重点) /sys:伪文件系统,跟硬件设备相关的属性映射.(硬盘) /tmp:临时文件→/var/tmp /bin:binary,可执行文件,用户命令 /sbin:管理命令 /usr:shared read-only,全局共享只读文件. /usr/local /usr/local/bin /usr/local/sbin    〉这些目录,为第三方软件 /usr/local/lib

嵌入式菜鸟进阶①---算法入门基础

1.按照数据元素之间存在的逻辑关系可分4中种逻辑关系: "一对一":线性结构 "一对多":树形结构 "多对多":图状或网状结构 "同属一个集合,无其它关系":纯集合结构 2.按在计算机中存储分类: 顺序存储:逻辑相邻且物理位置也相邻 链状存储:逻辑相邻,物理位置无要求 索引存储:存储数据元素的同时,建立索引表,索引表中一般包括关键字和地址等信息(关键字唯一标识一个数据元素) 散列存储:依据数据元素的关键字直接计算出数据元素的存

菜鸟进阶Linux高手之路——第四天(下)

Linux操作系统及命令 GUI:图形用户界面 windows x-Windows(CS架构) CLI:commomd line interface IDE:程序员在开发程序时,所用到的开发程序.(开发环境) 计算机组成   shell library:API(库) 内核 硬件 为什么需要库? 由于系统调用(内核),固于底层.所以程序员调用非常麻烦.所以库将一个或多个功能封装起来,做成更高级的应用接口.(库是一个可执行程序,但无法单独运行) 内核 为了能实现在同一个计算机上,同时近似地运用多个程

菜鸟进阶Linux高手之路——第五天

Linux:rtc 硬件时钟:hwclock 系统时钟:date 如何获得命令的使用帮助: 内部命令:help COMMAND 外部命令:COMMAND help 命令手册:manual man COMMAND 目录分章节(bin,/usr/bin,/user/local/bin) 1:用户命令 2:系统调用 3:库调用(用户) 4:特殊文件(设备文件→作为设备访问入口) 5:文件格式(符合配置文件语法) 6:游戏 7:杂项 miscellaneous 8:管理命令(/sbin,/usr/sbi

菜鸟进阶-2016-07-09

最近将电脑里的python3.5换成了python2.7 因此电脑里的一些文本编辑器就需要修改了 1.Sublime Text3 打开软件 -> Tools -> Build System -> New Build System... 输入下列代码 保存,命名为Python27.sublime-build 这时在Build System中就可以看到Python27了,选中即可 这样就可以使用python2.7了!!! 效果 2.PyCharm File -> Settings...