本文主要讲如何使用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. 使用OPENROWSET爆破SQL Server密码

    使用OPENROWSET爆破SQL Server密码   OPENROWSET函数是SQL Server提供的一个连接函数.它可以用于使用OLE DB方式连接一个数据库,并进行数据查询等操作.使用该函 ...

  2. 2016集训测试赛(十八)Problem C: 集串雷 既分数规划学习笔记

    Solution 分数规划经典题. 话说我怎么老是忘记分数规划怎么做呀... 所以这里就大概写一下分数规划咯: 分数规划解决的是这样一类问题: 有\(a_1, a_2 ... a_n\)和\(b_1, ...

  3. 如何在SQLite中创建自增字段

      SQLite 简单的回答:一个声明为 INTEGER PRIMARY KEY 的字段将自动增加. 这里是详细的答案: 从 SQLite 的 2.3.4 版本开始,如果你将一个表中的一个字段声明为 ...

  4. Objective-C的self.用法的一些总结

    最近有人问我关于什么时候用self.赋值的问题, 我总结了一下, 发出来给大家参考. 有什么问题请大家斧正. 关于什么时间用self. , 其实是和Obj-c的存取方法有关, 不过网上很多人也都这么解 ...

  5. Picasso,Glide,Fresco那个好?

    前言:在Android开发中,图片加载OOM一直困扰着很多开发者,在各种不合理的设计之下也容易导致图片加载OOM的问题,目前开源的比较常用的图片加载库也很多,比如老牌的UIL,Volley,AQuer ...

  6. Android性能优化第(二)篇---Memory Monitor检测内存泄露

    上篇说了一些性能优化的理论部分,主要是回顾一下,有了理论,小平同志又讲了,实践是检验真理的唯一标准,对于内存泄露的问题,现在通过Android Studio自带工具Memory Monitor 检测出 ...

  7. 同步数据库到Codis代码

    同步mysql数据库到codis缓存中 public void syncRule() { // 根据时间戳获取Mycat中规则表数据 logger.info("start ..." ...

  8. HDU 3466 01背包变形

    给出物品数量N和总钱数M 对于N个物品.每一个物品有其花费p[i], 特殊值q[i],价值v[i] q[i] 表示当手中剩余的钱数大于q[i]时,才干够买这个物品 首先对N个物品进行 q-p的排序,表 ...

  9. mysql使用mysqldump 与 mysqlimport进行数据库迁移

    1.导入数据库 1)source source /home/platvt/product/pc2_create_tables.sql 2)mysqlimport 使用mysqlimport导入数据: ...

  10. element的el-tabs控制,以及el-select 多选默认值

    一.el-tabs 1.element自己已经封装好了,当切换时v-model的值自动切换为el-tabs-pane的name对应的值. 如下: <el-tabs v-model='active ...