Grunt Plugins
http://gruntjs.com/plugins
grunt-contrib-sass
sass: {
compile: {
files: {
'css/core.css': ['css/core.scss']
}
}
}
grunt-contrib-cssmin #CSS压缩
cssmin: {
combine: {
files: {
'css/core-min.css': ['css/core.css']
}
}
}
cssmin: {
with_banner: {
options: {
banner: '/* projA Css files by Sonic */'
},
files: {
'dist/css/combo.css': ['src/css/base.css','src/css/index.css']
}
}
}
grunt-contrib-uglify #JS压缩
uglify: { // jsmin
options: {
mangle: false
},
build: {
files: {
'dist/js/comm.js': ['src/js/comm.js']
}
}
},
grunt-contrib-imagemin #图片压缩
imagemin: {
dist: {
options: {
optimizationLevel: 3
},
files: {
'dist/images/photo.png': 'src/images/photo.png',
'dist/images/badge.jpg': 'src/images/badge.jpg'
}
}
}
imagemin: {
dist: {
options: {
optimizationLevel: 3 //定义 PNG 图片优化水平
},
files: [{
expand: true,
cwd: 'img/',
src: ['**/*.{png,jpg,jpeg}'], // 优化 img 目录下所有 png/jpg/jpeg 图片
dest: 'img/' // 优化后的图片保存位置,覆盖旧图片,并且不作提示
}]
}
}
grunt-contrib-csslint #CSS校验
csslint: {
options: {
formatters: [
{id: 'junit-xml', dest: 'public/stylesheets/csslint_junit.xml'},
{id: 'csslint-xml', dest: 'public/stylesheets/csslint.xml'}
]
},
strict: {
options: {
import: 2
},
src: ['public/stylesheets/common.css']
}
}
grunt --force
grunt-contrib-jshint #JS校验
https://github.com/gruntjs/grunt-contrib-jshint
options: {
'-W085': true, // ignore: Don't use 'with'
'-W004': true, // ignore: 'xxx' is already defined
'-W116': true, // ignore: Expected '===' and instead saw '=='
'-W033': true, // ignore: Missing semicolon
//'-W032': true, // ignore: unnecessary semicolon
//'-W038': true // ignore: 'xxx' used out of scope
}
function f(n) { // W004 'n' is already defined
var n;
}
grunt-contrib-watch
watch: {
scripts: {
files: ['assets/css/*.less'],
tasks: ['less']
}
}
grunt-contrib-htmlmin
htmlmin: {
dist: {
options: {
removeComments: true, // 去注析
collapseWhitespace: true // 去换行
},
files: {
'dist/html/index.html': ['src/html/index.html']
}
}
}
grunt-contrib-compass
compass: { // compass任务
dist: { // 一个子任务
options: { // 任务的设置
sassDir: 'sass',
cssDir: 'css',
environment: 'production'
}
},
dev: { // 另一个子任务
options: {
sassDir: 'sass',
cssDir: 'style'
}
}
}
grunt-contrib-concat #合并
pkg: grunt.file.readJSON('package.json'),
concat: {
options: { //配置
stripBanners: true,
banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + //添加自定义的banner
'<%= grunt.template.today("yyyy-mm-dd") %> */'
},
dist: { //任务
src: ['src/intro.js', 'src/project.js', 'src/outro.js'], //源目录文件
dest: 'dist/built.js' //合并后的文件
},
basic_and_extras: { //另一个任务
files: { //另一种更简便的写法
'dist/basic.js': ['src/main.js'],
'dist/with_extras.js': ['src/main.js', 'src/extras.js']
}
}
}
grunt-contrib-copy
copy: {
main: {
files: [
{src: 'index.html', dest: 'dest/index.html'},
{src: ['assets/images/**'], dest: 'dest/'},
{src: ['assets/css/app.min.css'], dest: 'dest/'},
{src: ['assets/js/lib/libs.min.js'], dest: 'dest/'},
{src: ['assets/js/app.min.js'], dest: 'dest/'}
]
}
}
grunt-contrib-less
less: { // 任务task 固定命名
// 编译
compile: { // 目标target 随意命名
files: { // 文件files 固定命名
'assets/css/main.css': 'assets/css/main.less' // dest src
}
},
// 压缩
yuicompress: {
files: {
'assets/css/main-min.css': 'assets/css/main.css'
},
options: { // 选项options
yuicompress: true
}
}
}
less: {
dist: {
files: {
'assets/css/main-min.css': ['assets/css/base.less', 'assets/css/main.less']
},
options: {
yuicompress: true
}
}
}
grunt-contrib-connect
为文件建立站点,实现通过浏览器访问文件的功能
http://localhost:9001/src/html/index.html
grunt-regarde
监控哪些文件发生变化,当变化发生时,执行设定的任务
grunt-contrib-livereload
建立web socket服务器,让页面同web socket通行