本文主要讲如何使用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. Linux笔记:vim

    文件搜索后显示高亮,即使退出编辑高亮依然存在.使用以下几个方法: 1)指令模式下运行:nohlsearch 2)运行set nohlsearc,可永久关闭搜索高亮 3)搜索任意不存在的字符串

  2. 洛谷——P1977 出租车拼车

    题目背景 话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐 出租车去.大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人 坐车去,还是一堆人一起,总共需要支付的钱 ...

  3. 2016集训测试赛(二十)Problem B: 字典树

    题目大意 你们自己感受一下原题的画风... 我怀疑出题人当年就是语文爆零的 下面复述一下出题人的意思: 操作1: 给你一个点集, 要你在trie上找到所有这样的点, 满足点集中存在某个点所表示的字符串 ...

  4. Java使用HttpURLConnection调用WebService(原始方法)

    说明:使用Java原生的HttpURLConnection调用WebService可以免去引入SOA的框架,比如一些CXF框架等.可以使代码足够精简,比如对于一些只调用一两个接口的,这种方式是最适合的 ...

  5. JetBrains软件开发框架下的类似于“.IntelliJIdea2018.1”的配置文件夹的移动

    JetBrains软件开发框架下几款软件,如: 会在C盘用户文件夹下生成很大的配置文件夹(IDE config folder),十分占空间,也影响电脑性能. 这些索引目录移动的原理相似,现在以Idea ...

  6. mysql数据对象

      学习目标:   了解掌握常见的几种数据库对象 学会如何创建具体的数据对象   mysql 常见的数据对象有哪些: DataBase/Schema Table Index View/Trigger/ ...

  7. RxJava Android(RxAndroid) 开发全家桶

    RxJava 在 Android 应用开发中越来越流行,但是由于其门槛稍高,初次使用不免遇到很多问题,例如在 RxJava 常见的错误用法 和 不该使用 RxJava 的一些情况 中所描述的情况.为了 ...

  8. FTP的主动模式与被动模式

    FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...

  9. Leetcode 编程训练(转载)

    Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google.微软.Facebook.Amazon之类的这些公司,基本上是 ...

  10. HTML5 Support In Visual Studio 2010

    最近HTML5浪潮已经开始了,VS2010已经有一个扩展支持在HTML5智能提示.你可以从这里下载这个扩展: http://visualstudiogallery.msdn.microsoft.com ...