本文主要讲如何使用Grunt实现less文件压缩。css
less是很是经常使用的样式框架之一,Grunt也提供了能够编译和打包less样式文件的插件:grunt-contrib-less。html
实现原理分析:git
分析该插件源码,能够发现该插件实际只作了对样式文件的各类处理,真正进行编译less文件到css文件,实际仍是调用的less库的less.render方法实现的。npm
以下是grunt-contrib-less库源码:数组
npm install grunt-contrib-less --save-dev
grunt.loadNpmTasks('grunt-contrib-less');
该插件配置吧比较简单,下边只列出做者用到的几个经常使用属性:框架
设置要处理的less文件地址和输出的css文件地址。less
1 files: { 2 'dist/build.css': 'theme/build.less' 3 }
其它各类配置都在options中,具体属性以下:异步
paths:函数
类型: String Array Function
grunt
默认值: 根目录.
意义:定义@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
意义:标记,编译以后文件顶部标记
下边是一个实例项目。
1 module.exports = function(grunt) { 2 grunt.initConfig({ 3 // 清理空文件夹 4 clean: { 5 foo1: { 6 src: ['dist/*'] 7 } 8 }, 9 less: { 10 css: { 11 options: { 12 compress: true, 13 strictMath: true 14 }, 15 files: { 16 'dist/build.css': 'theme/build.less' 17 } 18 } 19 } 20 21 }); 22 23 grunt.loadNpmTasks('grunt-contrib-less'); 24 grunt.loadNpmTasks('grunt-contrib-clean'); 25 26 // 默认被执行的任务列表。 27 grunt.registerTask('default', [ 28 'clean', 29 'less' 30 ]); 31 32 };
@import "a.less";
1 @width: 80px; 2 @color: 'red'; 3 4 .a-title { 5 color: @color; 6 width: @width; 7 height: 100px; 8 background-color: blueviolet; 9 }
1 .a-title { 2 color: 'red'; 3 width: 80px; 4 height: 100px; 5 background-color: blueviolet 6 }
上边实战源码获取地址:
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