grunt-contrib-cssmin
使用内部的
clean-css
,如
选项所述,任何本地(
clean-css
)选项都会被传递给
"clean-css"。
为方便起见,
clean-css
将优化分成不同的
级别。有两个控制规则删除的选项,均在第二级别下找到:
restructureRules: false, // should disable all removals
skipProperties: [] // specify individual rules to skip
这应该可以做到:
cssmin: {
options: {
skipProperties: ['r']
}
}
从clean-css 4.2.0 开始,将提供一种“注释”块方法,可跳过整个片段:
.testClass {
r: 4;
width: 3px;
margin-left: 18px !important;
}
注意:4.2
版本尚未发布。
经过一些测试,上述方法似乎都无效,尽管根据文档,它们“应该”有效。
我唯一的替代方案是用grunt-postcss cssnano
替换grunt-contrib-cssmin
(这是我在Grunt中使用的压缩解决方案):
npm install grunt-postcss cssnano
grunt.initConfig({
postcss: {
processors: [
require('cssnano')({
})
]
},
});
grunt.loadNpmTasks('grunt-postcss');
grunt.registerTask('postcss', ["postcss"]);
在实践中,我使用更多的
postcss
插件。
以下是一个实际示例,其中包括
autoprefixer
、
pixrem
、
postcss-flexbox
和
cssnano
:
module.exports = function(grunt) {
grunt.initConfig({
postcss: {
options: {
processors: [
require('pixrem'),
require('autoprefixer')({browsers: ['> 0%']}),
require('postcss-flexboxfixer'),
require('cssnano')({
autoprefixer:false,
zindex: false
})
]
},
jack: {
files: [{
expand:true,
flatten:true,
cwd: 'assets/',
src: ['scss/*.css', '!**/variables.css'],
dest:'assets/css/'
}]
}
},
watch: {
styles: {
files: [
'assets/scss/*.css'
],
tasks:['postcss:jack']
}
}
});
grunt.loadNpmTasks('grunt-postcss');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ["watch:styles"]);
grunt.registerTask('jack', ["postcss:jack"]);
};
我特意注册了一个仅运行postcss
插件的任务:
grunt jack
不要忘记,您需要安装每个插件才能与 postcss
一起使用。对于上面的示例,您需要安装以下插件:
npm install grunt-postcss cssnano pixrem autoprefixer postcss-flexboxfixer
... 而且,很可能您想要更改files
以匹配您拥有的任何内容。
这一次,我进行了测试。 r
属性进入了被压缩的文件:
.testClass{r:20;width:3px;margin-left:18px!important}