本文主要讲如何使用Grunt实现less文件压缩。

一 说明

less是非常常用的样式框架之一,Grunt也提供了可以编译和打包less样式文件的插件:grunt-contrib-less。

实现原理分析:

分析该插件源码,可以发现该插件实际只做了对样式文件的各种处理,真正进行编译less文件到css文件,实际还是调用的less库的less.render方法实现的。

如下是grunt-contrib-less库源码:

二 安装

npm install grunt-contrib-less --save-dev

三 加载任务

grunt.loadNpmTasks('grunt-contrib-less');

四 配置

该插件配置吧比较简单,下边只列出作者用到的几个常用属性:

4.1 files

设置要处理的less文件地址和输出的css文件地址。

 files: {
'dist/build.css': 'theme/build.less'
}

4.2 options

其它各种配置都在options中,具体属性如下:

paths:

  类型: String Array Function

  默认值: 根目录.

  意义:定义@import加载文件的路径。默认值是文件的当前路径。 如果指定一个函数的源文件路径将是第一个参数。您可以返回到使用字符串或路径的数组。

rootpath:

  类型:String

  默认值:“”

  意义:所有文件都是基于这个路径

compress:

  类型:bool

  默认值:false

  意义:压缩编译之后的css文件,即删除css文件中的空行和空格

cleancss:

  类型: bool

  默认值: false

  意义: 使用clean-css来压缩css文件

cleancssOptions:

  类型: Object

  默认值: none

  意义:如果设置cleancss为true的话,此项才起效果,配置cleancss的选项

ieCompat:

  类型:bool

  默认值:true

  意义:编译之后的css文件适应于ie8

optimization:

  类型: Integer

  默认值:null

  意义:设置优化等级,数字越小,在树中创建的节点越少。会影响到调试。

strictImports:

  类型:bool

  默认值:false

  意义:如果设置为true,less将会以标准的模式来加载@import引用的文件

strictMath:

  类型:bool

  默认值:false

  意义:如果设置为true,表达式需要用括号括起来

strictUnits:

  类型:bool

  默认值:false

  意义:如果设置为true,less将会验证单位是否合法

syncImport:

  类型:bool

  默认值:false

  意义:异步加载通过@import引用的文件

dumpLineNumbers:

  类型:string(comments, mediaquery,all)

  默认值:false

  意义:

relativeUrls:

  类型:bool

  默认值:false

  意义:重写url为相对url

customFunctions:

  类型: Object

  默认值: none

  意义:自定义函数,一般是全局功能的。

report:

  类型: string ('min', 'gzip')

  默认值:min

  意义:何种方式来压缩文件,gzip更消耗时间

sourceMap:

  类型:bool

  默认值:false

  意义:是否使用文件映射

sourceMapFilename:

  类型:string

  默认值:none

  意义:编写源与给定的文件名映射到一个单独的文件。

sourceMapUrl:

  类型:string

  默认值:none

  意义:重写css文件中的源映射。

sourceMapBasepath:

  类型:string

  默认值:none

  意义:设置在源映射中的less文件路径的基本路径。

sourceMapRootpath:

  类型:string

  默认值:none

  意义:在map文件中的less文件根目录

outputSourceFiles:

  类型:bool

  默认值:false

  意义:将less文件放到Map文件中,替换引用。

modifyVars:

  类型: Object

  默认值: none

  意义:重写全局变量

banner:

  类型:string

  默认值: none

  意义:标记,编译之后文件顶部标记

五 实战

下边是一个实例项目。

5.1 整体项目目录:

5.2 gruntfile.js文件中配置:

 module.exports = function(grunt) {
grunt.initConfig({
// 清理空文件夹
clean: {
foo1: {
src: ['dist/*']
}
},
less: {
css: {
options: {
compress: true,
strictMath: true
},
files: {
'dist/build.css': 'theme/build.less'
}
}
} }); grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-clean'); // 默认被执行的任务列表。
grunt.registerTask('default', [
'clean',
'less'
]); };

5.3 入口文件build.less代码很简单:

@import "a.less";

5.4 核心less文件a.less代码如下:

 @width: 80px;
@color: 'red'; .a-title {
color: @color;
width: @width;
height: 100px;
background-color: blueviolet;
}

5.5 执行grunt命令后输出文件build.css如下(下边是格式化后的):

 .a-title {
color: 'red';
width: 80px;
height: 100px;
background-color: blueviolet
}

六 实战代码下载地址

上边实战源码获取地址:

https://gitee.com/bangbangwa/grunt/blob/master/grunt-contrib-less-test.rar

参考资料&内容来源

Grunt官网:https://www.npmjs.com/package/grunt-contrib-less

博客园:https://www.cnblogs.com/xiyangbaixue/p/4132901.html

Grunt学习笔记【7】---- grunt-contrib-less插件详解的更多相关文章

  1. Grunt学习笔记【8】---- grunt-angular-templates插件详解

    本文主要讲如何用Grunt打包AngularJS的模板HTML. 一 说明 AngularJS中使用单独HTML模板文件的地方非常多,例如:自定义指令.ng-include.templateUrl等. ...

  2. Grunt学习笔记【6】---- grunt-contrib-requirejs插件详解

    本文主要讲如何使用Grunt实现RequireJS文件压缩. 一 说明 ES6出来前,RequireJS是JavaScript模块化最常用的方式之一.对于使用RequireJS构建的项目,要实现打包压 ...

  3. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  4. (转)live555学习笔记10-h264 RTP传输详解(2)

    参考: 1,live555学习笔记10-h264 RTP传输详解(2) http://blog.csdn.net/niu_gao/article/details/6936108 2,H264 sps ...

  5. SNMP学习笔记之SNMP 原理与实战详解

    原文地址:http://freeloda.blog.51cto.com/2033581/1306743 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...

  6. Django学习笔记之Django Form表单详解

    知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的 ...

  7. JQuery学习笔记系列(一)----选择器详解

    笔者好长时间没有更新过博客园的笔记了,一部分原因是去年刚刚开始工作一段时间忙碌的加班,体会了一种每天加班到凌晨的充实感,之后闲暇时间了也因为自己懒惰没有坚持记笔记的习惯,现在重新拾起来. 借用古人的一 ...

  8. SharpDevelop学习笔记(5)—— AddIns系统详解

    在所有的插件被加载到指定的扩展点后,插件树就被创建完毕了, 但是,我们知道,插件树创建后,每个插件在插件树的位置在就固定的,但是,如果某些情况下,我们希望一些插件不可使用或应该隐藏起来, 或者说有的插 ...

  9. Hibernate学习笔记二:Hibernate缓存策略详解

    一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...

随机推荐

  1. IIS 7 Access to the path ‘c:\windows\system32\inetsrv\’ is denied

    https://randypaulo.wordpress.com/2011/09/13/iis-7-access-to-the-path-cwindowssystem32inetsrv-isdenie ...

  2. PHP的fsockopen方式访问接口慢的原因与优化方案

    在开发过程中常常遇到这样的需求,模拟浏览器访问某接口,并获取返回数据.我们比较常使用的方法是fsockopen与接口建立连接,然后发出指令,然后通过fgets接受返回值. 但是我们发现,通过PHP模拟 ...

  3. SecureCRT导出服务器列表或配置文件

    说明:SecureCRT没有Xshell那么简单有直接导出的功能,但是可以通过技巧的方式来操作. 1.打开SecureCRT,点击菜单栏的[Opitions]->[Global Opitions ...

  4. 聊聊、Zookeeper Linux 集群服务

    今天是平安夜,先祝大家平安夜快乐.这篇文章我们来谈谈 Zookeeper Linux 集群. 为什么要集群呢?因为一台服务不够.集群是为了系统扩容,系统稳定.一台服务挂了,没关系,我还有其他的服务.集 ...

  5. C#是唯一能挑战Java的编程语言?

    几乎所有新近成长的Visual Studio代码开发人员都选择使用C#,而不是VB.NET或C++,这也使得C#已经成长为微软的第一大语言.根据本月的Tiobe编程语言排行榜,C#再次取得了突破性进展 ...

  6. xml 文件不给提示(以mybatis 的 mapper映射文件为例)

    在xxx.xml 映射文件的头部可以看到 如下: (mybatis generate 自动生成) <!DOCTYPE mapper PUBLIC "-//mybatis.org//DT ...

  7. linux 文件删除恢复extundelete

    首先要把删除文件所有磁盘分区卸载掉 然后安装yum install -y extundelete *2fs* extundelete /dev/sdb1 --inode #查看sdb1分区下删除的文件 ...

  8. iptables和DNS

    1.iptables防火墙 表→链→规则 filter表 数据过滤表 NAT表---内网和外网的地址转换 Mangle-----数据流量,通过防火墙设置流量.特殊数据包标记.太复杂,一般不用.限速工具 ...

  9. 如何让DIV居中

    总结:text-align:center;对三中浏览器而言,都具有文字/行内元素的嵌套式居中,或者说继承式的居中,只要外面的容器设置了这个属性,那么他内部的所有元素都具有这个属性(意思是,虽然这个属性 ...

  10. 京东2015年应届生招聘笔试题(A)卷答案选择题部分

    1.操作系统死锁的必要条件(多选题):()   A.相互排斥条件   B.系统资源有限   C.进程调度不合理   D.环路等待条件 答:A,C,D 參考资料:http://blog.sina.com ...