//包装函数
module.exports = function(grunt) {
require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);
// 任务配置,所有插件的配置信息
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
//压缩JS
// uglify: {
// options: {
// banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
// },
// // build: {
// // src: 'src/*.js',
// // dest: 'build/<%= pkg.name %>-<%= pkg.version %>.min.js'
// // }
// builda: {//任务一:压缩a.js,不混淆变量名,保留注释,添加banner和footer
// options: {
// mangle: false, //不混淆变量名
// preserveComments: 'all', //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
// footer:'\n/*! <%= pkg.name %> 最后修改于: <%= grunt.template.today("yyyy-mm-dd") %> */'//添加footer
// },
// files: {
// 'build/a.min.js': ['src/a.js']
// }
// },
// buildb:{//任务二:压缩b.js,输出压缩信息
// options: {
// report: "min"//输出压缩率,可选的值有 false(不输出信息),gzip
// },
// files: {
// 'build/b.min.js': ['src/b.js']
// }
// },
// buildall: {//任务三:按原文件结构压缩js文件夹内所有JS文件
// files: [{
// expand:true,
// cwd:'src',//js目录下
// src:'*.js',//所有js文件
// dest: 'build/js'//输出到此目录下
// }]
// },
// release: {//任务四:合并压缩a.js和b.js
// files: {
// 'build/index.min.js': ['src/a.js', 'src/b.js']
// }
// }
// },
// jshint: {
// build: ['Gruntfile.js','src/*.js'],
// options: {
// jshintrc:'.jshintrc'
// }
// }
//压缩js
uglify: {
//文件头部输出信息
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
my_target: {
files: [
{
expand: true,
//相对路径
cwd: 'src/',
src: '*.js',
dest: 'dest/js/',
rename: function (dest, src) {
var folder = src.substring(0, src.lastIndexOf('/'));
var filename = src.substring(src.lastIndexOf('/'), src.length);
// var filename=src;
filename = filename.substring(0, filename.lastIndexOf('.'));
var fileresult=dest + folder + filename + '.min.js';
grunt.log.writeln("现处理文件:"+src+" 处理后文件:"+fileresult);
return fileresult;
//return filename + '.min.js';
}
}
]
}
},
//压缩CSS
cssmin: {
//文件头部输出信息
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
//美化代码
beautify: {
//中文ascii化,非常有用!防止中文乱码的神配置
ascii_only: true
}
},
my_target: {
files: [
{
expand: true,
//相对路径
cwd: 'css/',
src: '*.css',
dest: 'dest/css/',
rename: function (dest, src) {
var folder = src.substring(0, src.lastIndexOf('/'));
var filename = src.substring(src.lastIndexOf('/'), src.length);
// var filename=src;
filename = filename.substring(0, filename.lastIndexOf('.'));
var fileresult=dest + folder + filename + '.min.css';
grunt.log.writeln("现处理文件:"+src+" 处理后文件:"+fileresult);
return fileresult;
//return filename + '.min.js';
}
}
]
}
},
// 文件合并
concat: {
options: {
separator: ';',
stripBanners: true
},
js: {
src: [
"src/js/*.js"
],
dest: "dist/html/js/app.js"
},
css:{
src: [
"src/css/*.css"
],
dest: "dist/html/css/main.css"
}
},
// 清除目录
csslint: {
/* 检查 CSS 语法 */
src: ['css/**/*.css']
},
jshint: {
/* 检查 js 语法 */
all: ['src/*.js']
}
,
clean: {
all: ['dist/html/**', 'dist/*.*'],
image: 'dist/html/images',
css: 'dist/html/css',
html: 'dist/html/**/*'
},
//复制
copy: {
src: {
files: [
{expand: true, cwd: 'src', src: ['*.html'], dest: 'dist/html'}
]
},
image: {
files: [
{expand: true, cwd: 'src', src: ['images/*.{png,jpg,jpeg,gif}'], dest: 'dist/html'}
]
}
},
//压缩图片
imagemin: {
prod: {
options: {
optimizationLevel: 7,
pngquant: true
},
files: [
{expand: true, cwd: 'dist/html', src: ['images/*.{png,jpg,jpeg,gif,webp,svg}'], dest: 'dist/html'}
]
}
},
// 处理html中css、js 引入合并问题
usemin: {
html: 'dist/html/*.html'
},
//压缩HTML
htmlmin: {
options: {
removeComments: true,
removeCommentsFromCDATA: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeOptionalTags: true
},
html: {
files: [
{expand: true, cwd: 'dist/html', src: ['*.html'], dest: 'dist/html'}
]
}
},
watch: {
uglify: {
files: ['src/*.js'],
options: {livereload:false}
}
/* 监控文件变化并执行相应任务 */
// img: {
// files: ['src/img/**/*.{png,jpg,jpeg}'],
// options: {
// livereload: true
// }
// },
// css: {
// options: {
// event: ['changed', 'added'],
// livereload: true
// },
// files: ['src/css/**/*.css']
// },
// js: {
// options: {
// livereload: true
// },
// files: ['src/*.js']
// },
// html: {
// options: {
// livereload: true
// },
// files: ['*.html']
// }
}
});
// grunt.loadNpmTasks('grunt-contrib-jshint');
// grunt.loadNpmTasks('grunt-contrib-uglify');
// grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('cssmin', ['cssmin']);//, 'qunit', 'concat' 'uglify',
grunt.registerTask('uglify', ['uglify']);
}
|