Grunt的配置及使用(压缩合并js/css)



安装

前提是你已经安装了nodejs和npm。

你能够在 nodejs.org 下载安装包安装。也能够通过包管理器(比方在 Mac 上用 homebrew,同一时候推荐在 Mac 上用 homebrew)。

安装grunt CLI

npm install -g grunt-cli

依照官方的说法。grunt-cli仅仅是为了在同一台机器上安装不同的grunt版本号,那么咱们先不去管他。

在项目中使用grunt

首先须要往项目里加入两个文件:package.json和Gruntfile.js

· package.json:该文件用来为npm存放项目配置的元数据,与grunt关系最大的配置在devDependencies中。

· [javascript] view plaincopyprint?

1. {

2.     "name": "cyjs",

3.     "version": "0.1.0",

4.     "description": "js for k68.org",

5.     "homepage": "http://www.k68.org/",

6.     "author": "firebaby",

7.     "devDependencies": {

8.       "grunt": "~0.4.1",

9.       "grunt-contrib-jshint": "~0.3.0",

10.       "grunt-contrib-concat": "~0.1.1",

11.       "grunt-contrib-uglify": "~0.1.2",

12.       "grunt-contrib-cssmin": "~0.5.0",

13.       "grunt-htmlhint": "~0.9.2"

14.     }

15. }

· {

·     "name": "cyjs",

·     "version": "0.1.0",

·     "description": "js for k68.org",

·     "homepage": "http://www.k68.org/",

·     "author": "firebaby",

·     "devDependencies": {

·       "grunt": "~0.4.1",

·       "grunt-contrib-jshint": "~0.3.0",

·       "grunt-contrib-concat": "~0.1.1",

·       "grunt-contrib-uglify": "~0.1.2",

·       "grunt-contrib-cssmin": "~0.5.0",

·       "grunt-htmlhint": "~0.9.2"

·     }

}

· Gruntfile.js:注意G的大写,这个文件就是grunt的配置了,当中具体定义了每一个任务的细节和运行任务的顺序等。

一、安装grunt

方式一、调用配置文件一起安装

npm install

方式二、逐步安装

在命令行进入项目所在文件夹,键入例如以下命令就可以,npm会依据devDependencies中的配置,将须要的grunt及其插件下载到你的项目文件夹中。

npm install grunt --save-dev

grunt-contrib-jshint(js语法检查)、grunt-contrib-concat(js合并)、grunt-contrib-uglify(採用UglifyJS压缩js)、grunt-contrib-cssmin(Css压缩合并)、grunt-htmlhint(html语法验查),以上都是经常使用的插件。

很多其它插件,请訪问:http://gruntjs.com/plugins

在项目文件夹下安装插件也可採用例如以下方式安装:

安装:uglify

[txt] view plaincopyprint?

1. npm install grunt-contrib-uglify

npm install grunt-contrib-uglify

安装:cssmin

[txt] view plaincopyprint?

1. npm install grunt-contrib-cssmin

npm install grunt-contrib-cssmin

插件安装完毕后,查看根文件夹,会发现node_modules文件夹,包括了对应的插件文件夹。

二、新建Gruntfile.js

Gruntfile.js由下面内容组成

1、wrapper函数。结构例如以下,这是Node.js的典型写法,使用exports公开API

[javascript] view plaincopyprint?

1. module.exports = function(grunt) {

2.      // Do grunt-related things in here

3.    };

module.exports = function(grunt) {

// Do grunt-related things in here

};

2、项目和任务配置

3、加载grunt插件和任务

4、定制运行任务

例:

[javascript] view plaincopyprint?

1. module.exports = function(grunt) {

2.   //配置參数

3.   grunt.initConfig({

4.      pkg: grunt.file.readJSON('package.json'),

5.      concat: {

6.          options: {

7.              separator: ';',

8.              stripBanners: true

9.          },

10.          dist: {

11.              src: [

12.                  "js/config.js",

13.                  "js/smeite.js",

14.                  "js/index.js"

15.              ],

16.              dest: "assets/js/default.js"

17.          }

18.      },

19.      uglify: {

20.          options: {

21.          },

22.          dist: {

23.              files: {

24.                  'assets/js/default.min.js': 'assets/js/default.js'

25.              }

26.          }

27.      },

28.      cssmin: {

29.          options: {

30.              keepSpecialComments: 0

31.          },

32.          compress: {

33.              files: {

34.                  'assets/css/default.css': [

35.                      "css/global.css",

36.                      "css/pops.css",

37.                      "css/index.css"

38.                  ]

39.              }

40.          }

41.      }

42.   });

43.

44.   //加载concat和uglify插件。分别对于合并和压缩

45.   grunt.loadNpmTasks('grunt-contrib-concat');

46.   grunt.loadNpmTasks('grunt-contrib-uglify');

47.   grunt.loadNpmTasks('grunt-contrib-cssmin');

48.

49.   //注冊任务

50.   grunt.registerTask('default', ['concat', 'uglify', 'cssmin']);

51. }

module.exports = function(grunt) {

//配置參数

grunt.initConfig({

pkg: grunt.file.readJSON('package.json'),

concat: {

options: {

separator: ';',

stripBanners: true

},

dist: {

src: [

"js/config.js",

"js/smeite.js",

"js/index.js"

],

dest: "assets/js/default.js"

}

},

uglify: {

options: {

},

dist: {

files: {

'assets/js/default.min.js': 'assets/js/default.js'

}

}

},

cssmin: {

options: {

keepSpecialComments: 0

},

compress: {

files: {

'assets/css/default.css': [

"css/global.css",

"css/pops.css",

"css/index.css"

]

}

}

}

});

//加载concat和uglify插件,分别对于合并和压缩

grunt.loadNpmTasks('grunt-contrib-concat');

grunt.loadNpmTasks('grunt-contrib-uglify');

grunt.loadNpmTasks('grunt-contrib-cssmin');

//注冊任务

grunt.registerTask('default', ['concat', 'uglify', 'cssmin']);

}

grunt api文档:http://gruntjs.com/api/grunt

三、命令行运行grunt任务

进入到项目根文件夹,敲:

[txt] view plaincopyprint

">?

1. grunt

grunt

就会按Gruntfile配置的文件进行压缩合并。

也能够单独运行,例运行js压缩命令:

[txt] view plaincopyprint?

1. grunt uglify

grunt uglify

css压缩命令

[txt] view plaincopyprint

">?

1. grunt cssmin

DEMO下载:点击打开链接

Grunt的配置及使用(压缩合并js/css)的更多相关文章

  1. 前端构建工具 Gulp 压缩合并JS/CSS 并添加版本号、ES6转ES5

    Gulp 基于 Node.js 的前端构建工具,可以实现前端代码的编译(sass.less).压缩合并(JS.CSS).测试:图片的压缩:已经添加 JS 和 CSS 版本号,防止浏览器缓存. 1. 安 ...

  2. 引用:使用grunt 压缩 合并js、css文件

    引用:https://www.jianshu.com/p/08c7babdec65 压缩 js 文件 1.创建一个目录 名为grunt   目录.png 2.在grunt目录下创建一个 src目录,存 ...

  3. 第十一节:Bundles压缩合并js和css及原理分析

    一. 简介 1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是M ...

  4. Google Pagespeed,自动压缩优化JS/CSS/Image

    Google Pagespeed,自动压缩优化JS/CSS/Image 浏览: 发布日期:// 分类:技术分享 关键字: Nginx Appache Pagespeed 自动压缩优化JS/CSS/Im ...

  5. 自写脚本实现上线前本地批量压缩混淆 js , css 代码。

    最近做项目遇到一个要求,就是把本地的 js 和 css 进行压缩后再上线,由于之前项目并没有使用 webpack 之类的库,项目上也因为一些机密不能在线上压缩,这无疑给代码打包压缩带来了很大麻烦,于是 ...

  6. 使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度

    使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度 一些泛WEB 2.0网站为了追求用户体验,可能会大量使用CSS和JS文件.这就导致在服务器带宽一定的情况下,多用户并发访问速度变慢.如何加 ...

  7. maven 压缩、合并 js, css

    转载自:http://blog.csdn.net/fangxing80/article/details/17639607 我们知道在 Web 应用开发中为了提高客户端响应速度,需要将页面使用的资源最小 ...

  8. 压缩/批量压缩/合并js文件

    写在前面 如果文件少的话,直接去网站转化一下就行. http://tool.oschina.net/jscompress?type=3 1.压缩单个js文件 cnpm install uglify-j ...

  9. Web性能优化之动态合并JS/CSS文件并缓存客户端

    来源:微信公众号CodeL 在Web开发过程中,会产生很多的js/css文件,传统的引用外部文件的方式会产生多次的http请求,从而加重服务器负担且网页加载缓慢,如何在一次请求中将多个文件一次加载出来 ...

随机推荐

  1. MongoDB——环境搭建

    项目中需要将一些读多改少的数据存入到 MongoDB 数据库中来提高效率,于是简单学习一些MongoDB数据库的知识,来进行应对,也是对自己知识盲区进行补充.本文主要学习介绍MongoDB数据库在Li ...

  2. SOJ 4552 [期望,概率]

    题目链接:[http://acm.scu.edu.cn/soj/problem.action?id=4552] 题意:给你n种卡牌,每种卡牌有无限多个,每次从中抽取一张卡牌,问:1.集齐这n种卡牌需要 ...

  3. HDU3530【STL/单调队列/RMQ】

    题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=3530] 题意:输入n,m,k;n代表n个点,在这n(n<100000)个点中找到最长的连续子序列 ...

  4. POJ3450 Corporate Identity

    后缀数组. 解决多个字符串的最长公共子串. 采用对长度的二分,将子串按height分组,每次判断是否在每个字符串中都出现过. 复杂度O(NlogN) By:大奕哥 #include<cstrin ...

  5. [BZOJ4016][FJOI2014]最短路径树问题(dijkstra+点分治)

    4016: [FJOI2014]最短路径树问题 Time Limit: 5 Sec  Memory Limit: 512 MBSubmit: 1796  Solved: 625[Submit][Sta ...

  6. 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels

    题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...

  7. AIDL原理之 Framewok层实现

    AIDLFramework层的架构,如下图: 换而言之,Android就是在传统的C/S架构中加入了一层,实现IPC.图中表明,AIDL类似COM的Proxy/Stub架构.不过是现在android自 ...

  8. 常用数据库validationQuery检查语句

    数据库 validationQuery Oracle select 1 from dual DB2 select 1 from sysibm.sysdummy1  mysql select 1  mi ...

  9. python使用UnboundMethodType修改类方法

    from types import UnboundMethodType class class1(object): def fun1(self): print 'fun1' oldfun1 = cla ...

  10. bzoj 1009: [HNOI2008]GT考试 -- KMP+矩阵

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数X1X2.. ...