前端工程化grunt
1、grunt是什么?
grunt是基于nodejs的前端构建工具。grunt用于解决前端开发的工程问题。
2、安装nodejs
Grunt和所有grunt插件都是基于nodejs来运行的。
安装了nodejs之后,可以在你的控制台中输入“node -v”来查看nodejs的版本,也顺便试验nodejs是否安装成功。
注意:第一,grunt依赖于nodejs的v0.8.0及以上版本;第二,奇数版本号的版本被认为是不稳定的开发版,不过从官网上下载下来的应该都是偶数的稳定版。
3、安装grunt-CLI
安装前提:电脑联网
“CLI”被翻译为“命令行”,要想使用grunt,首先必须将grunt-cli安装到全局环境中,使用nodejs的“npm install…”进行安装。
先简单介绍一下npm:
官网:https://npmjs.org
Npm是一个NodeJS包管理和分发工具,他提供了nodejs插件的依赖管理。
现在npm已经集成在nodejs的安装包,不需要单独安装了。
常用npm命令:
npm install xxx 安装模块
npm install xxx -g 将模块安装到全局环境中
npm ls 查看安装的模块及依赖
npm ls -g 查看全局安装的模块及依赖
npm uninstall xxx (-g) 卸载模块
npm cache clean 清理缓存
安装grunt-CLI过程
windows系统下使用管理员权限打开控制台。输入:
注意:mac os系统、部分linux系统中,需要在这句话之前加上“sudo”。
回车,命令行会出现一个转动的小横线,表示正在联网加载。加载的时间看你网速的快慢,不过这个软件比较小,一般加载时间不会很长,稍一会儿,就加载完了。你会看到以下界面。
2、验证一下grunt-cli是否安装完成并生效,只需要继续在命令行中输入“grunt”命令即可。如果生效,则会出现以下结果:
反正出现这个,就证明安装成功了
4、创建一个简单的网站
Grunt是应用于实际项目的,所以我们得有一个简单的测试网站来演示grunt的安装、使用
首先,我在电脑E盘创建了一个文件夹:grunt_test。里面建了三个空文件夹、两个空文档,名称如下图。(注意 Gruntfile.js 文件的首字母大写!)
先把package.json这个文件写一些东西。记住,既然文件后缀名叫“json”,那么文件中的格式肯定是严格的json格式。内容如下:
简单把这个网站或系统的名称、版本写了一下。
devDependencies字面意思解释是“开发依赖项”,即我们现在这个系统,将会依赖于哪些工具来开发。先写一个空对象。下文再慢慢把它填充起来。
5、安装grunt
接下来会有一系列插件的安装,他们的安装过程和grunt一样。但是他们的执行都是基于grunt的,因此才能把grunt叫做一个“构建工具”。Grunt没有具体的作用,但是它能把有具体作用的一个一个插件组合起来,形成一个整体效应。
基于grunt构建的前端工程能做很多事情,常见的有: 文件压缩,文件合并,less文件编译,sass文件编译,coffeeScript文件的编译等。例如,你需要检查js语法错误,然后再去压缩js代码。如果这两步你都去手动操作,会耗费很多成本。Grunt就能让你省去这些手动操作的成本。
1、进入E:\grunt_test目录下输入。
--save-dev的意思是,在当前目录安装grunt的同时,顺便把grunt保存为这个目录的开发依赖项。
上面的devDependencies对应的就是空对象。运行这行命令后,你会看到几条warning提示,不用管它。然后接下来就是加载状态,一个旋转的小横线。稍等待一会儿,会提示你安装成功。
由于网太慢,我就直接使用淘宝镜像来安装了,用cnpm代替npm;
打开package.json,“devDependencies”发生了变化。
文件夹中多了一个“node_modules”文件夹
控制台运行grunt命令会得到一个warning提示。
这样就说明grunt已经起作用,安装成功了。
为何我们在刚才执行grunt时候会有Warning提示呢?
根据提示,我们得知的信息是:Task “default” not found ,下面会解决这个问题。
6、配置Gruntfile.js
Gruntfile.js 这个文件,肯定是为了grunt做某种配置的。按照grunt的规定,我们首先把Gruntfile.js配置成如下格式。
保存,在控制台再次运行grunt命令
注意Gruntfile.js中的一句话:
这句话是在Gruntfile.js中获取package.json中的内容。在上文配置package.json时我们说 过:package.json中的内容不光是用来占位置的,还可以在其他地方获取。这里已经获取,如何使用在下文。
7、Grunt插件介绍
进入grunt官网的插件列表页面 http://www.gruntjs.net/plugins ,我们能看到grunt到目前位置的所有插件。现在里面有4560个插件,这个数量每天都在增加。而且,这些既然出现在官网,肯定是经过审核的。
插件分为两类。第一类是grunt团队贡献的插件,这些插件的名字前面都带有“contrib-”前缀,而且在插件列表中有星号标注。第二类是第三方提供的插件,不带有这两个特征。
我把前几名插件的作用简单描述一下
Contrib-jshint——javascript语法错误检查;
Contrib-watch——实时监控文件变化、调用相应的任务重新执行;
Contrib-clean——清空文件、文件夹;
Contrib-uglify——压缩javascript代码
Contrib-copy——复制文件、文件夹
Contrib-concat——合并多个文件的代码到一个文件中
karma——前端自动化测试工具
以上这些插件,不会全部讲到。
但是随着讲解其中的一部分,我想你就能掌握使用grunt插件的方法。
知道方法了,然后你就可以参考官方文档去使用你想要的插件。
8、使用uglify插件
Uglify插件的功能就是压缩javascript代码。
要安装一个插件,你首先要进入这个插件在grunt官网的说明文档页面。我们在grunt官网插件列表页面,找到“contrib-uglify”点击进入。
安装uglify插件的方式,和安装grunt是一样的。
运行这句命令。安装完成之后,你会看到 package.json中“devDependencies”节点的变化,以及“node_modules”文件夹里的变化。
既然要使用uglify来压缩javascript代码,当然得创建一个js文件来做实验。我们在现有的“src”文件夹中新建一个“test.js”
测试文件建立好了。我们接下来就要把这个js文件进行压缩。
如果要压缩,需要在Gruntfile.js中配置。分为三步:
第一步,在grunt.initConfig方法中配置 uglify 的配置参数。如下图:
注意:true后面是逗号。
上图中,对uglify的配置有两项。
“options”中规定允许生成的压缩文件带banner,即在生成的压缩文件第一行加一句话说明。注意,其中使用到了pkg获取package.json的内容。
“build”中配置了源文件和目标文件。即规定了要压缩谁?压缩之后会生成谁?注意,我们这里将目标文件的文件名通过pkg的name和version来命名。
第二步,在 grunt.initConfig 方法之后,要让grunt去加载这一个插件。
第三步,在grunt命令执行时,要不要立即执行uglify插件?如果要,就写上,否则不写。
在控制台输入grunt
生成一个压缩后的js文件
9、使用jshint插件(检查js语法错误)
插件的安装和安装grunt、uglify没有任何差别,这里不再赘述了。直接执行下面的命令
配置jshint和配置uglify一样。在配置uglify时候我们讲到了三个步骤,这里也是三个步骤。
第一步,在grunt.initConfig方法中配置jshint。
和uglify的配置一样,分为“options”和“build”两个部分。
“build”中描述了jshint要检查哪些js文档的语法。
“options”中描述了要通过怎么的规则检查语法,这些规则的描述文件就保存在网站根目录下的一个叫做“.jshintrc”的文件中。
因此我们在网 站的根目录下面添加上这个文档,并且填写上文件内容。
第二步,加载插件。和uglify的加载方法一样。注意,这里没有先后顺序。
第三步,配置grunt命令启动时,要执行的任务,这里注意先后顺序,最好是先检查语法
以上三步配置完了之后,我们可以测试一下这个jshint到底怎么用。这里我故意将当前创建的test.js文件写一个语法错误。
在控制台输入grunt检查
jshint错误之后呢,其后面的uglify就没有再继续执行。我们修改完这些错误,在此执行grunt命令,结果没有提示错误,而且jshint和uglify都顺利执行了。
10. 使用csslint插件(检查css语法错误)
检查css文件的语法错误要使用csslint插件,其安装配置方法和jshint几乎一模一样。
只不过csslint依赖于一个叫做“.csslintrc”的文件作为语法检验的规则,我的“.csslintrc”文件如下。其他内容我们就不在此赘述了。
11. 使用watch插件(真正实现自动化)
首先安装watch插件。
接下来要配置watch插件,配置分为三个步骤
配置watch将监控哪些文件的变化,以及这些文件一旦变化,要立即执行哪些插件功能。
如下图,watch将监控src文件夹下所有js文件和css文件的变化,一旦变化,则立即执行jshint和uglify两个插件功能。
这三步执行完了,即watch插件配置完成。
运行grunt命令,控制台提示watch已经开始监听。此时要想停止,按ctrl + c即可。
既然在监听,我们试一试看监听有没有效。我们将 test.js 代码中去掉一个分号,看它能否自动检查出来这个错误。
结果显示,watch检查到了test.js文件的变化,而且通过执行jshint提示了语法错误。
更重要的是,它现在还在监听、并未停止。
说明它正在等着你去修改错误,重新监听检查。再把语法错误修复了。看它会如何处理。
它检测到了文件变化,这次语法没有错误,它很顺利的执行了jshint和uglify,执行完毕之后重新进行监听。
12. 上文中所谓的“build”
上文中描述各个插件的配置时,都是用了“build”这一名称作为一个配置项。
那么这里是不是必须用“build”这一个名字?
答案很明显,当然不是。
这里可以用任何字符串代替“build”(但要符合js语法规则)。
甚至,你可以把“build”指向的内容分开来写。
这样对多人协同开发很友好。好的设计就是这样:让用户尽情发挥他们的自由来干事,而不是去限制他们。
13. 批量安装插件
在E盘建立一个新的文件夹grunt_test_1,
将grunt_test中的package.json复制粘贴到文件夹grunt_test_1中
再在打开命令行跳转到“grunt_test_1”,执行“cnpm install”命令
在“grunt_test_1”生成了“node_modules”文件夹,里面安装好了package.json中“devDependencies”配置的插件。而且,版本都是一直的。
最后说一下系统文件结构,这是我所学到的我觉得应该注意的
src文件夹里面存储的是原始的代码文件
dist文件夹里面存储的是最终生成的代码文件
demo里面存储的是一些测试页面
前端工程化grunt的更多相关文章
- 前端工程化开发之yeoman、bower、grunt
		
上两遍文章介绍了前端模块化开发(以seaJs为例)和前端自动化开发(以grunt为例)的流程,参见: http://www.cnblogs.com/luozhihao/p/4818782.html ( ...
 - 前端工程化系列[04]-Grunt构建工具的使用进阶
		
在前端工程化系列[02]-Grunt构建工具的基本使用和前端工程化系列[03]-Grunt构建工具的运转机制这两篇文章中,我们对Grunt以及Grunt插件的使用已经有了初步的认识,并探讨了Grunt ...
 - 前端工程化系列[03]-Grunt构建工具的运转机制
		
在前端工程化系列[02]-Grunt构建工具的基本使用这篇文章中,已经对Grunt做了简单的介绍,此外,我们还知道了该如何来安装Grunt环境,以及使用一些常见的插件了,这篇文章主要介绍Grunt的核 ...
 - [转]基于gulp和webpack的前端工程化
		
本文样例代码 :https://github.com/demohi/learning-gulp 本文主要简单介绍一下基于gulp和webpack的前端工程化. 技术栈 React.js reFlux ...
 - 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)
		
1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...
 - 前端工程化系列[06]-Yeoman脚手架核心机制
		
在前端工程化系列[05] Yeoman脚手架使用入门这边文章中,对Yeoman的使用做了简单的入门介绍,这篇文章我们将接着探讨Yeoman这个脚手架工具内部的核心机制,主要包括以下内容 ❏ Yeoma ...
 - vue组件续和前端工程化
		
1.3 插槽 slot template: ` <button> <slot></slot> </button> ` <my-button> ...
 - 10分钟学会前端工程化(webpack4.0)
		
一.概要 1.1.前端工程化 随着前端的不断发展与壮大,前端变得越来越复杂,组件化.模块化.工程化.自动化成了前端发展中不可或缺的一部分,具体到前端工程化,面临的问题是如何提高编码->测试-&g ...
 - 前端工程化与webpack
		
(1) 前端工程化 近几年来,前端领域飞速发展,前端的工作早已不再是切几张图,写几个页面那么简单,项目比较大时,很可能会多人协同开发,模块化,组件化,CSS预编译等技术也被广泛的使用.前端自动化( ...
 
随机推荐
- 201521123102 《Java程序设计》第5周学习总结
			
1. 本周学习总结 2. 书面作业 Q1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能 ...
 - Python2.7笔记——常用技术点汇总
			
目录 · 概况 · 安装 · 基础 · 基础语法 · 数据类型 · 变量 · 常量 · 字符编码 · 字符串格式化 · list · tuple · dict · set · if语句 · for语句 ...
 - 读Zepto源码之Touch模块
			
大家都知道,因为历史原因,移动端上的点击事件会有 300ms 左右的延迟,Zepto 的 touch 模块解决的就是移动端点击延迟的问题,同时也提供了滑动的 swipe 事件. 读 Zepto 源码系 ...
 - Java-大集合拆分为指定大小的小集合
			
因为Oracle数据的in 最大允许1000 ,超过就会报错, 所以需要将集合拆分为多个集合进行处理. /** * 拆分集合 * @param <T> * @param resList 要 ...
 - htt p第一章概述
			
http的概述 1 web客户端与服务器是如何通信 2 web资源来自的何方 3 web事务是怎样的工作的 4 http通信所使用的报文结构 5 底层tcp的传输的结构 6不同的http协议体 什么是 ...
 - OC——继承
			
继承的其中一个很重要的目的是为了实现多态.我们现在先来看看OC的继承. 一.继承 父类: 头文件 // // Peason.h // 01-继承和多态 // // Created by zhangji ...
 - 微信公众号开发——关于“WeixinJSBridge.call('closeWindow');”无效的问题
			
最近在做微信公众号的开发,再做一个jsp的用户绑定页面,设置了一个timestamp,想实现的是当链接超时时alert一个窗口提示然后关闭网页窗口 但是呢,在jsp页面内直接 out.print(&q ...
 - angularjs之ui-bootstrap的Datepicker Popup实现双日期选择控件
			
最开始使用ui-bootstrap的Datepicker Popup日期选择插件实现双日期选择时间范围时,在网上搜了一些通过JS去实现的方法,不过后来发现可以不必通过JS去处理,只需要使用其自身的属性 ...
 - oracle11g 体系结构详解
			
1.oracle内存由SGA+PGA所构成 2.oracle数据库体系结构数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. oracle工作原理: 1).在数据库 ...
 - python django 使用 haystack:全文检索的框架
			
haystack:全文检索的框架whoosh:纯Python编写的全文搜索引擎jieba:一款免费的中文分词包 首先安装这三个包 pip install django-haystackpip inst ...