grunt 配置文件
module.exports = function (grunt) {
pkg: grunt.file.readJSON('package.json'),
var sourceDir = "dev";// 源码目录
var buildDir = ".build";// 构建中间目录
var finalDir = "release";// 最终打包目录
var static_url = "";
var transport = require('grunt-cmd-transport');
var style = transport.style.init(grunt);
var script = transport.script.init(grunt);
grunt.initConfig({
watch: {
css: {
files: ['' + sourceDir + '/**/*.css'],
tasks: ['css_combo', 'css_url_replace', 'clean', 'copy:build'],
options: {livereload: true}
},
js: {
files: ['' + sourceDir + '/**/*.js'],
tasks: ['transport', 'concat', 'uglify', 'clean', 'copy:build', 'copy:base'],
options: {livereload: true}
},
images: {
files: ['' + sourceDir + '/images/**/*'],
tasks: ['copy:image'],
options: {livereload: true}
}
},
// 检测js依赖
transport: {
options: {
paths: [sourceDir],
parsers: {
'.js': [script.jsParser],
'.css': [style.css2jsParser]
},
alias: {
//lib-flexible
'flexible': static_url + '/lib/flexible/0.3.2/flexible',
// jquery
'jquery': static_url + '/lib/jquery/1.8.2/jquery',
// iscroll
'iscroll': static_url + '/lib/iscroll/4.2.5/iscroll',
// iscroll5
'iscroll5': static_url + '/lib/iscroll/5.0/iscroll-probe.js',
// jquery的base64库
'base64': static_url + '/lib/base64/0.0.3/base64',
// validForm验证库
'validForm': static_url + '/lib/validForm/5.3.2/validForm',
// artDialog弹出库
'dialog': static_url + '/lib/artDialog/4.1.7/artDialog',
// artTemplate的js模版引擎库
'template': static_url + '/lib/artTemplate/0.0.1/artTemplate',
// swiper
'swiper': static_url + '/lib/swiper/3.1.0/swiper.min',
//qrcode
'qrcode': static_url + "/lib/qrcode/0.0.1/qrcode.min.js",
//sweetAlert
'sweetAlert': static_url + "/lib/sweetAlert/0.0.1/sweetalert.min.js",
//echarts
'echarts': static_url + "/lib/echarts/3.7.1/echarts.min.js",
//jsencrypt
'jsencrypt': static_url + "/lib/echarts/2.3.1/jsencrypt.js",
//laydate日历插件
'laydate': static_url + "/lib/laydate/laydate.js",
'select2': static_url + "/lib/select/select2.js",
//laydate粘贴板插件
'clipboard': static_url + "/lib/clipboard/1.0.0/clipboard.js"
}
},
build: {
files: [
{
cwd: sourceDir,
src: ['module/**/*.js'],
dest: buildDir
}
]
}
},
// 合并js
concat: {
options: {
paths: [buildDir],
include: 'all'
},
build: {
files: [
{
expand: true,
cwd: buildDir,
src: ['**/**/*.js', '!lib/*', '!**/**/*-debug.js'],
dest: finalDir
}
]
}
},
// 压缩js
uglify: {
//banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'//添加banner
options: {
mangle: true, //不混淆变量名
//preserveComments: 'all', //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
footer: '\n/*! 最后修改于: <%= grunt.template.today("yyyy-mm-dd") %> */', //添加footer
compress: {
drop_console: true
}
},
build: {
files: [
{
expand: true,
cwd: sourceDir,
src: ['**/**/*.js', 'base/js/*.js', '!**/**/*-debug.js', '!**/lib/**/*.js'],
dest: finalDir
}
]
}
},
//压缩css
css_combo: {
options: {
debug: false,
compress: true
},
build: {
files: [{
expand: true,
cwd: sourceDir,
src: ['**/*.css', 'base/css/*.css', '!**/tmpcommon/*.css', '!**/tmpcommon/*.js'],
dest: finalDir
}]
}
},
css_url_replace: {
options: {
staticRoot: sourceDir
},
replace: {
files: [{
expand: true,
cwd: finalDir,
src: ['**/*.css', '!**/tmpcommon/*.css', '!**/tmpcommon/*.js'],
dest: finalDir
}]
}
},
// 删除临时目录
clean: {
build: [buildDir],
removeCommon: [finalDir + '/module/tmpcommon', finalDir + '/css/tmpcommon']
},
//复制文件
copy: {
build: {
expand: true,
flatten: false,
cwd: sourceDir,
src: ['!module/tmpcommon/*.js', 'lib/**/*.js', 'lib/**/*.woff'],
dest: finalDir,
filter: 'isFile'
},
image: {
expand: true,
flatten: false,
cwd: sourceDir,
src: ['images/**/*'],
dest: finalDir,
filter: 'isFile'
},
lib: {
expand: true,
flatten: false,
cwd: sourceDir,
src: ['lib/**/*'],
dest: finalDir,
filter: 'isFile'
},
configJs: {
expand: true,
flatten: false,
cwd: sourceDir,
src: ['public/config.js'],
dest: finalDir,
filter: 'isFile'
}
}
});
grunt.loadNpmTasks('grunt-css-combo');
grunt.loadNpmTasks('grunt-css-url-replace');
grunt.loadNpmTasks('grunt-cmd-transport');
grunt.loadNpmTasks('grunt-cmd-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-livereload');
grunt.loadNpmTasks('grunt-contrib-watch');
// 监听
grunt.registerTask('dev', ['watch']);
// 处理全部
grunt.registerTask('init', ['transport', 'concat', 'uglify', 'css_combo', 'css_url_replace', 'copy', 'clean']);
};帮助文档:
https://www.cnblogs.com/well-nice/p/4801408.html
https://www.cnblogs.com/mangoniki/p/5383240.html