module.exports = function(grunt){
//1.引入
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-htmlmin'); //2.设置任务:
grunt.initConfig({
// //压缩CSS
cssmin:{
yasuo:{
options:{
mangle:false
},
expand: true,
cwd: 'css',//压缩那个文件夹里的文件
src:'*.css',//压缩那个文件
dest:'yscss',放压缩后文件的文件夹
ext:'.min.css'压缩后文件的的名字
}
},
// //压缩HTML
htmlmin:{
options: {
removeComments: true, //移除注释
removeCommentsFromCDATA: true,//移除来自字符数据的注释
collapseWhitespace: true,//无用空格
collapseBooleanAttributes: true,//失败的布尔属性
removeAttributeQuotes: true,//移除属性引号 有些属性不可移走引号
removeRedundantAttributes: true,//移除多余的属性
useShortDoctype: true,//使用短的跟元素
removeEmptyAttributes: true,//移除空的属性
removeOptionalTags: true//移除可选附加标签
},
yasuo:{
expand: true,
cwd: 'index',
src: ['*.html'],
dest: 'yshtml'
}
} });
//设置默认任务
grunt.registerTask('default',['cssmin','htmlmin']);
}

grunt.initConfig方法

用于模块配置,它接受一个对象作为参数。该对象的成员与使用的同名模块一一对应。

每个目标的具体设置,需要参考该模板的文档。就cssmin来讲,minify目标的参数具体含义如下:

  • expand:如果设为true,就表示下面文件名的占位符(即*号)都要扩展成具体的文件名。
  • cwd:需要处理的文件(input)所在的目录。
  • src:表示需要处理的文件。如果采用数组形式,数组的每一项就是一个文件名,可以使用通配符。
  • dest:表示处理后的文件名或所在目录。
  • ext:表示处理后的文件后缀名。

grunt常用函数说明:

grunt.initConfig:定义各种模块的参数,每一个成员项对应一个同名模块。
grunt.loadNpmTasks:加载完成任务所需的模块。
grunt.registerTask:定义具体的任务。第一个参数为任务名,第二个参数是一个数组, 表示该任务需要依次使用的模块。

grunt常用模块:

  • grunt-contrib-clean:删除文件。
  • grunt-contrib-compass:使用compass编译sass文件。
  • grunt-contrib-concat:合并文件。
  • grunt-contrib-copy:复制文件。
  • grunt-contrib-cssmin:压缩以及合并CSS文件。
  • grunt-contrib-imagemin:图像压缩模块。
  • grunt-contrib-jshint:检查JavaScript语法。
  • grunt-contrib-uglify:压缩以及合并JavaScript文件。
  • grunt-contrib-watch:监视文件变动,做出相应动作。

package.json 包依赖关系:

{
"name": "grunt-study",
"version": "1.0.0",
"description": "study",
"main": "index.js",
"scripts": {
"test": "test"
},
"repository": {
"type": "git",
"url": "https://github.com/hubcarl"
},
"devDependencies":{
"matchdep": "latest",
"shelljs": "latest",
"ngmshell": "latest",
"grunt": "latest",
"grunt-contrib-clean": "latest",
"grunt-contrib-concat": "latest",
"grunt-contrib-copy": "latest",
"grunt-contrib-connect": "latest",
"grunt-contrib-htmlmin": "latest",
"grunt-contrib-cssmin": "latest",
"grunt-contrib-imagemin": "latest",
"grunt-contrib-uglify": "latest",
"grunt-contrib-watch": "latest",
"grunt-usemin": "latest",
"connect-livereload": "latest"
},
"keywords": [
"grunt"
],
"author": "bluesky",
"license": "BSD-2-Clause",
"bugs": {
"url": "https://github.com/hubcarl"
}
}

  

module.exports = function (grunt) {

  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

  grunt.initConfig({

    //清除目录
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'}
]
}
}, // 文件合并
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"
}
}, //压缩JS
uglify: {
prod: {
options: {
mangle: {
except: ['require', 'exports', 'module', 'window']
},
compress: {
global_defs: {
PROD: true
},
dead_code: true,
pure_funcs: [
"console.log",
"console.info"
]
}
}, files: [{
expand: true,
cwd: 'dist/html',
src: ['js/*.js', '!js/*.min.js'],
dest: 'dist/html'
}]
}
}, //压缩CSS
cssmin: {
prod: {
options: {
report: 'gzip'
},
files: [
{
expand: true,
cwd: 'dist/html',
src: ['css/*.css'],
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'}
]
}
} }); grunt.registerTask('prod', [
'copy', //复制文件
'concat', //合并文件
'imagemin', //图片压缩
'cssmin', //CSS压缩
'uglify', //JS压缩
'usemin', //HTML处理
'htmlmin' //HTML压缩
]); grunt.registerTask('publish', ['clean', 'prod']);
};

  index.html发布之前内容:

<!DOCTYPE html>
<html>
<head>
<title>Grunt 测试</title>
<meta charset="utf-8">
<!-- build:css css/main.css -->
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/web.css">
<!-- endbuild --> <!-- build:js js/main.js -->
<script src="js/zepto.js"></script>
<script src="js/common.js"></script>
<script src="js/service.js"></script>
<!-- endbuild -->
</head>
<body>
<p></p>
Hello,Grunt!
</body>
</html>

  

执行grunt publish之后:

<!DOCTYPE html><html><head><title>Grunt 测试</title><meta charset=utf-8><link rel=stylesheet href=css/main.css><script src=js/main.js></script><body><p></p>Hello,Grunt<body><html>

grunt 压缩js css html 合并等配置与操作详解的更多相关文章

  1. 开箱即用 - Grunt合并和压缩 js,css 文件

    js,css 文件合并与压缩 Grunt 是前端自动化构建工具,类似webpack. 它究竟有多强悍,请看它的 介绍. 这里只演示如何用它的皮毛功能:文件合并与压缩. 首先说下js,css 合并与压缩 ...

  2. 前端自动化(三) 合并压缩css、压缩js、添加时间戳、打包上线操作

    前端自动化(三)   合并压缩css.压缩js.添加时间戳.打包上线操作 此文在前两篇基础上对比参考,会很方便理解 gulp.task("delete",function(){ r ...

  3. 如何使用grunt压缩js文件

    jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过 ...

  4. 前端js,css文件合并三种方式,bat命令

    前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...

  5. 吉特仓储管系统(开源)--使用Grunt压缩JS文件

    在吉特仓储管理系统开发的过程中大量使用到了JS,随着JS文件的增多我们需要对JS进行有效的管理,同时也要对JS文件进行一些压缩.文本用于记录一下使用grunt压缩JS的操作步骤,便于遗忘之后记录查找, ...

  6. PHP动态压缩js,css

    PHP动态压缩js,css 列表项 标签: PHP 正式发布产品时,我们希望将项目里的js,css合并压缩,以减少http请求.防止轻易查看源代码. 使用 只需要在头部引入一下代码即可: <me ...

  7. webpack安装配置使用教程详解

    webpack安装配置使用教程详解 www.111cn.net 更新:2015-09-01 编辑:swteen 来源:转载 本文章来为各位详细的介绍一下关于webpack安装配置使用教程吧,这篇文章对 ...

  8. js实现的新闻列表垂直滚动实现详解

    js实现的新闻列表垂直滚动实现详解:新闻列表垂直滚动效果在大量的网站都有应用,有点自然是不言而喻的,首先由于网页的空间有限,使用滚动代码可以使用最小的空间提供更多的信息量,还有让网页有了动态的效果,更 ...

  9. OpenVPN下载、安装、配置及使用详解

    OpenVPN下载.安装.配置及使用详解   OpenVPN简介 OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件.使用OpenVPN可 ...

随机推荐

  1. Linux软件包管理 RMP包管理

    概述 RPM 包的命名一般都会遵守统一的命名规则,例如: httpd-2.2.15-15.el6.centos.1.i686.rpm 其中的各项代表的含义如下: httpd:软件包名. 2.2.15: ...

  2. HTML学习笔记(上)

    1. HTML介绍 1.1 什么是HTML HyperText Markup Language,超文本标记语言.简单来说,HTML文件本质上就是一个文本文件,但是这个文本文件是带有标签的. 不同的标签 ...

  3. 80211n标准建链速率计算

    转:https://wenku.baidu.com/view/93f99dd3ad51f01dc281f1af.html 转:http://www.docin.com/p-1851128644.htm ...

  4. php多个数组同键名键值相加合并

    //任意多个相同键值的数组合并相加 //预先将所要合并的数组组装成一个新的数组 // $arr = array( // array( // 'user_id' => 100, // 'goods ...

  5. seajs 入门

    最近想搞搞JS模块化, 读到了园子里的一篇好文:  http://www.cnblogs.com/lvdabao/p/js-modules-develop.html 看里面讲seajs不错, 于是想学 ...

  6. 手写RateLimiter

    自定义注解 封装 如果需要让接口实现限流RateLimiter使用 网关:一般拦截所有的接口 实现限流 秒杀 抢购 或者大流量的接口才会实现限流.灵活 不是所有接口都需要限流  秒杀等接口需要限流 设 ...

  7. 发现程序bug思路

    大家有没有遇到过项目,程序出现个bug,但花了好久(真的是a long long time啊)才发现引发这个问题的原因,心想原来就这个原因导致的啊,要是早想到就好了! 其实我们确实的是方法,希望我的抛 ...

  8. 权限【TLCL】

    用户帐户 定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面. /etc/shadow 包含了关于用户密码的信息 文件属性: 属性 文件类型 - 一个普通文件 d 一个 ...

  9. tp5 数据库Db查询操作

    $data = Db::query('select * from tf_action'); $data = Db::query('select * from tf_action where id &g ...

  10. SQL Server循环插入数据

    --循环执行插入10000条数据declare @ID intdeclare @eigyousyocode nvarchar(16)declare @datet datetimedeclare @pl ...