闲话和grunt
一年半没更新是因为自己转岗了,android framework+system转前端,可以想象过程之苦逼,苦成了一首诗:很烦很烦/非常烦/非常非常十分烦/特别烦特烦/极其烦/贼烦/简直烦死了/啊——。烦之余秉承人丑多看书的古训,啃书无数,成笔记百余篇,不成体系。每每回想,总是忘却了大多数,于是要整理一下,如趁尚未排泄出去要反刍几口,回味一下。
整理自是从近及远整理,所以随笔内容应该是由难到易,自顾自说,完全不考虑旁观人士。
开始。
最近在看grunt,说简单点就是个前端管理工具,如maven、ant之于java。放在一年半前,我会说“前端工程还需要管理?”,在经历了对QA无数次“JS没更新、你Ctrl+F5刷新一下嘛”,对运营“又要压缩?我一个一个文件压缩很累的”,对PL“这文件夹下都100多个文件了,没分类,还好多重构后废弃的”之后,我终于感觉到,前端还是需要管理的。
grunt是什么?是一个运行在node上的插件,所以要运行grunt先要把node的环境搭建好。
grunt能做什么?合并,压缩,混淆,编码重命名,修改html中的引用,甚至于语法检测、单元测试等等。
这样说是没有概念的,首先全局安装grunt-cli
npm install -g grunt-cli
现在你就可以使用grunt这个命令了,但这是米有意义的,因为grunt-cli的功能是调用当前目录下的grunt模块,本身不具备任何功能。也就是说grunt是局部安装的,这样不同的项目可以使用不同版本的grunt。
好了,现在要新建一个文件夹,进入然后执行
npm init //按指示生成package.json,如果单纯测试grunt,这个文件是可以缺失的
npm install grunt --save-dev //安装并保存依赖到package.json
再次执行grunt会提醒Gruntfile.js文件的缺失,这是grunt所有行为的入口,所以要新建Gruntfile.js文件,这个文件的结构分为4部分。
- wrapper
module.exports = function(grunt) {
// 所有的代码写在这里,注意传入参数grunt
}; - 任务配置
grunt.initConfig({
concat: {},
cssmin: {},
uglify: {}
}); - 加载插件
grunt.loadNpmTasks('grunt-contrib-concat'); //前提是使用npm install grunt-contrib-concat --save-dev
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify');这个部分可被load-grunt-tasks替代,在wrapper第一行进行配置
require('load-grunt-tasks')(grunt); //速度较慢,同样需要install
- 自定义任务
grunt.registerTask('default', ['concat', 'cssmin', 'uglify']);
执行grunt时默认执行default任务,如果这个部分缺失,则需要使用下列命令分别执行第2部分中注册的任务
grunt concat
grunt cssmin
grunt uglify
以上是grunt的入门部分,官网相对更加详尽,下一篇简述下Gruntfile.js中task的配置规则。
闲话和grunt的更多相关文章
- 没有闲话和grunt.initConfig()
grunt.initConfig()为Gruntfile.js的核心部分,它接收对象作为参数. 对象包含两种类型的属性,一种是单纯的变量,一种是task类型.举个栗子: grunt.initConfi ...
- AngularJS——grunt神器的安装
前言: 刚开始学 angularJS,在慕课网上看的大漠老师的视频(http://www.imooc.com/learn/156),里面刚开始讲述了前端开发-调试-测试所使用的手段和工具,本人对前端开 ...
- grunt之concat、cssmin、uglify
周末有点懒,跑去看了<智取威虎山>,手撕鬼子的神剧情节被徐老怪一条回忆线就解释过去了,牛到极致尽是这种四两拨千斤的处理方式,手撕加分,四星推荐. --------------------- ...
- 使用grunt实现自动化单元测试
闲话不多说~ 使用步骤 1.安装插件 npm install grunt-contrib-qunit --save-dev 2.加载包含 "qunit" 任务的插件 grunt.l ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- grunt配置任务
这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...
- 快速开发Grunt插件----压缩js模板
前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...
- 是时候搁置Grunt,耍一耍gulp了
也算是用了半年Grunt,几个月前也写过一篇它的入门文章(点此查看),不得不说它是前端项目的一个得力助手.不过技术工具跟语言一样日新月异,总会有更好用的新的东西把旧的拍死在沙滩上(当然Grunt肯定没 ...
- 应用Grunt自动化地优化你的项目前端
在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...
随机推荐
- 奇怪的道路[JXOI2012]
题目描述 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每条道路将两个城 ...
- pip&easy_install使用
pip install ... easy_install ... ******************************************************************* ...
- layer初步使用
type:基本层类型 layer提供了5种层类型.可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层). 若你采用layer.open({type: 1})方式 ...
- python_求相邻数
什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数 需求: 遍历inputList 所有数字,取出所有数字,判断是否有相邻数, 不相邻数字 和 相邻数字 都以 “数组”形式 ...
- UWP:使用Behavior实现FlipView简单缩放效果
先上效果图 首先安装Behavior SDK:在Nuget中搜索安装 Microsoft.Xaml.Behaviors.Uwp.Managed . 然后新建类,AnimationFlipViewBeh ...
- Java 脚本引擎
脚本引擎,就是一个编程语言的解释器,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,完成一系列的功能. Java脚本引擎简单地说就是指Java提供的一组兼容操作各种脚本语言的的API ...
- jsp基础与提高(EL、JSTL)
EL表达式 1.1 为什么需要EL表达式和JSP标签 JSP的产生在一定程度上将Servlet中负责表现的功能抽取了出来,但JSP页内嵌入的Java代码也破坏了页面中负责表现的页面结构,特别是当运算逻 ...
- 【Js应用实例】jQuery监听回车键
$(function(){ //焦点放在第一个文本输入框 $('input:text:first').focus(); //获取所有的输入框 var $inp=$('input'); //定义所有输入 ...
- [js高手之路]面向对象+设计模式+继承一步步改造简单的四则运算
到目前为止,我已经写完了面向对象完整的一个系列知识,前面基本属于理论,原理的理解,接下来,我们就用学到的知识来实战下吧. 看看理解原理和理论是否重要?例子从简单到复杂 一.单体(字面量)封装加减乘除 ...
- 7.21.02 switch语句
switch语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch语法格式如下: switch(expression) { case value : //语句 break ...