Grunt 自动化部署之css、image、javascript、html压缩Gruntfile.js配置(学习转载)

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 包依赖关系:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

{

  "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"

  }

}

  

Gruntfile.js配置css、image、javascript、html压缩

  1 module.exports = function (grunt) {
  2
  3   require(‘matchdep‘).filterDev(‘grunt-*‘).forEach(grunt.loadNpmTasks);
  4
  5   grunt.initConfig({
  6
  7     //清除目录
  8     clean: {
  9       all: [‘dist/html/**‘, ‘dist/*.*‘],
 10       image: ‘dist/html/images‘,
 11       css: ‘dist/html/css‘,
 12       html: ‘dist/html/**/*‘
 13     },
 14
 15     copy: {
 16       src: {
 17         files: [
 18           {expand: true, cwd: ‘src‘, src: [‘*.html‘], dest: ‘dist/html‘}
 19         ]
 20       },
 21       image: {
 22         files: [
 23           {expand: true, cwd: ‘src‘, src: [‘images/*.{png,jpg,jpeg,gif}‘], dest: ‘dist/html‘}
 24         ]
 25       }
 26     },
 27
 28     // 文件合并
 29     concat: {
 30       options: {
 31         separator: ‘;‘,
 32         stripBanners: true
 33       },
 34       js: {
 35         src: [
 36           "src/js/*.js"
 37         ],
 38         dest: "dist/html/js/app.js"
 39       },
 40       css:{
 41         src: [
 42           "src/css/*.css"
 43         ],
 44         dest: "dist/html/css/main.css"
 45       }
 46     },
 47
 48     //压缩JS
 49     uglify: {
 50       prod: {
 51         options: {
 52           mangle: {
 53             except: [‘require‘, ‘exports‘, ‘module‘, ‘window‘]
 54           },
 55           compress: {
 56             global_defs: {
 57               PROD: true
 58             },
 59             dead_code: true,
 60             pure_funcs: [
 61               "console.log",
 62               "console.info"
 63             ]
 64           }
 65         },
 66
 67         files: [{
 68             expand: true,
 69             cwd: ‘dist/html‘,
 70             src: [‘js/*.js‘, ‘!js/*.min.js‘],
 71             dest: ‘dist/html‘
 72         }]
 73       }
 74     },
 75
 76     //压缩CSS
 77     cssmin: {
 78       prod: {
 79         options: {
 80           report: ‘gzip‘
 81         },
 82         files: [
 83           {
 84             expand: true,
 85             cwd: ‘dist/html‘,
 86             src: [‘css/*.css‘],
 87             dest: ‘dist/html‘
 88           }
 89         ]
 90       }
 91     },
 92
 93     //压缩图片
 94     imagemin: {
 95       prod: {
 96         options: {
 97           optimizationLevel: 7,
 98           pngquant: true
 99         },
100         files: [
101           {expand: true, cwd: ‘dist/html‘, src: [‘images/*.{png,jpg,jpeg,gif,webp,svg}‘], dest: ‘dist/html‘}
102         ]
103       }
104     },
105
106     // 处理html中css、js 引入合并问题
107     usemin: {
108       html: ‘dist/html/*.html‘
109     },
110
111     //压缩HTML
112     htmlmin: {
113       options: {
114         removeComments: true,
115         removeCommentsFromCDATA: true,
116         collapseWhitespace: true,
117         collapseBooleanAttributes: true,
118         removeAttributeQuotes: true,
119         removeRedundantAttributes: true,
120         useShortDoctype: true,
121         removeEmptyAttributes: true,
122         removeOptionalTags: true
123       },
124       html: {
125         files: [
126           {expand: true, cwd: ‘dist/html‘, src: [‘*.html‘], dest: ‘dist/html‘}
127         ]
128       }
129     }
130
131   });
132
133
134   grunt.registerTask(‘prod‘, [
135     ‘copy‘,                 //复制文件
136     ‘concat‘,               //合并文件
137     ‘imagemin‘,             //图片压缩
138     ‘cssmin‘,               //CSS压缩
139     ‘uglify‘,               //JS压缩
140     ‘usemin‘,               //HTML处理
141     ‘htmlmin‘               //HTML压缩
142   ]);
143
144   grunt.registerTask(‘publish‘, [‘clean‘, ‘prod‘]);
145 };

index.html发布之前内容:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<!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>

时间: 2024-08-05 05:26:40

Grunt 自动化部署之css、image、javascript、html压缩Gruntfile.js配置(学习转载)的相关文章

Grunt 自动化部署之css、image、javascript、html压缩Gruntfile.js配置

grunt.initConfig方法 用于模块配置,它接受一个对象作为参数.该对象的成员与使用的同名模块一一对应. 每个目标的具体设置,需要参考该模板的文档.就cssmin来讲,minify目标的参数具体含义如下: expand:如果设为true,就表示下面文件名的占位符(即*号)都要扩展成具体的文件名. cwd:需要处理的文件(input)所在的目录. src:表示需要处理的文件.如果采用数组形式,数组的每一项就是一个文件名,可以使用通配符. dest:表示处理后的文件名或所在目录. ext:

(转载)HTML、CSS、JavaScript、PHP、MySQL 的学习顺序是什么?

文章转载自 鸟巢 - 技术分享的社区 http://t.runoob.com/question/13 1.HTML.CSS.JavaScript 前端学习三部曲,照着这个顺序依次学习 HTML教程.CSS教程.JavaScript 教程 就对了. 关于 JavaScript ,做以下两点说明:(1)JavaScript 之后,建议学习 jQuery 教程,jQuery 是一个 JavaScript 库,极大简化了 JS 编程.(2)学习 JavaScript 的时候,可能需要接触到 ajax,是

【转载】HTML、CSS、JavaScript、PHP、MySQL 的学习顺序是什么?

以下转载自 - 鸟巢 - 技术分享的社区 http://t.runoob.com/question/13(侵删) 1.HTML.CSS.JavaScript 前端学习三部曲,照着这个顺序依次学习 HTML教程.CSS教程.JavaScript 教程 就对了. 关于 JavaScript ,做以下两点说明:(1)JavaScript 之后,建议学习 jQuery 教程,jQuery 是一个 JavaScript 库,极大简化了 JS 编程.(2)学习 JavaScript 的时候,可能需要接触到

HTML、CSS、JavaScript、PHP、 MySQL的学习顺序是什么?

如果你有耐心坚持个一年以上的话, 我会推荐HTML, css ,js, apache ,php, mysql 后三者是需要装软件的, 推荐wamp, 绝佳的一站式环境配置, WampServer, the web development platform on Windows 直接包括了apache, php, mysql三个软件, 省的自己一个一个装.有不少人在评论里问mac os下对应的软件, 这里补充一下: XAMPP Installers and Downloads for Apache

应用Grunt自动化地优化你的项目前端

在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目每维护一次,就需要维护的人员输入一次rjs运行口令重新打包项目,自然是非常繁琐的事情.另外如果我们的项目用sass来写样式,可能还得外开一个koala.如果我们能让项目自己处理自己的所有事宜,那一切就美好多了. 针对上述问题,今天我们就利用更为大众的工具——Grunt,来自动化地处理前端事务(其实r

基于Jenkins+Gitlab的自动化部署实战

故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称"人肉部署",这简直是无比的痛苦,不能忍受的.这样开发的时间也会耽误,运维的时间也会耽误,全都浪费在这些重复性的工作上面,毫无价值可言, 这时候运维终于忍受不了,上了脚本.但是慢慢的发现项目依旧在增长,脚本每次还要更改给开发,效率低下,后来测试环境以及开发环境直接上了jeknins, 每台开发机器是jeknins agent端,自此

Grunt——自动化任务处理工具框架

学习文章,详细原文链接:http://yujiangshui.com/grunt-basic-tutorial/ 1. grunt是一个JavaScript任务运行器,自动化任务处理工具,是一个工具框架. 2. grunt基于node.js,用js开发. 3. 安装grunt (1)安装Node.js (2)npm install -g grunt-cil   (注意:安装的并不是Grunt,而是Grunt-cil,即命令行的Grunt,这样可以使用Grunt命令来执行某个项目中的Gruntfi

Linux下搭建jenkins+svn+http+maven自动化部署

服务器设置: 卸载redhat的yum,安装centos的yum,配置第三方yum 1.删除redhat原有的rpm -qa |grep yum |xargs rpm -e yum --nodeps 2.下载yum安装文件,如果下载时找不到文件,http://mirrors.163.com/centos/6/os/x86_64/ wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-3.2.27-14.el6.centos.noa

Linux LTMP手动编译安装以及全自动化部署实践

前言 现在很多朋友都了解或者已经在使用LNMP架构,一般可以理解为Linux Shell为CentOS/RadHat/Fedora/Debian/Ubuntu/等平台安装LNMP(Nginx/MySQL/PHP),LNMPA(Nginx/MySQL/PHP/Apache),LAMP(Apache/MySQL/PHP)等类似的开发或生产环境.我自己是从SuSE/Oracle商业化环境走出来的,对于开源的部署方案也是在一点一点摸索,我相信其中也必然包含某些坑爹的配置.这篇文章较为详细的描述了基于LT