Grunt--web前端构建工具

简介

Grunt是一款使用javascript开发的开源的web前端构建工具,有着丰富的给类工具插件。Grunt及其插件运行在node.js环境上。可以完成诸如:html/css/js/image文件的压缩和合并,html/css/js文件的静态检查,js的自动化测试,引入css/js文件的版本号自动更新,文件的删除和复制等等,web前端开发所需要的各类工作。

Grunt官网:http://gruntjs.com/

非官方中文网站:http://www.gruntjs.net/

Grunt的安装

Grunt在node.js环境上执行,使用前必须先安装node.js和npm。

node.js的安装

直接到官网下载安装包,执行安装即可。下载地址:https://nodejs.org/en/

安装了node.js之后,打开命令行控制台,输入“node -v”来查看node。js的版本,已验证node.js是否安装成功。npm集成在node.js的安装包,安装完node.js即可。输入“npm -v”,查看npm版本。

Grunt的安装

由于npm经常被墙,导致无法安装成功。幸好我们有了中兴自己的镜像。
执行“npm set registry http://mirrors.zte.com.cn/npm” 配置好镜像后,就能顺利完成安装了。执行“npm install -g grunt-cli” 安装Grunt,注意安装的是grunt-cli,-g表示全局安装,所有目录均可使用

安装完成后,执行“grunt -v”。验证安装是否成功。

Grunt插件的安装

安装Grunt插件的时候可以采用两种方式,一种是单个插件安装(常用于新搭建项目的场景);一种是插件批量安装(常用于下载项目文件后搭建开发环境)。具体安装方法如下:

  1. 安装单个插件
    首先在命令行控制台里,切换到项目根目录。例如安装jshint插件,执行“npm install grunt-contrib-jshint --save-dev”命令即可。

  2. 批量安装
    首先新建package.json文件。将需要安装的插件名称和版本填写好(如果是配置库上下载,已有配置文件,此步骤跳过)。详细内容参考下一小节。
    命令行控制台切换到项目根目录。执行“npm install --save-dev”命令即可。执行成功后,根目录下会出现node_modules目录,下面会出现已安装的所有插件。

package.json配置文件

配置具体示例如下:

{
  "name": "wxcop",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-contrib-clean": "^0.6.0",
    "grunt-contrib-copy": "^0.8.2",
    "grunt-contrib-cssmin": "^0.14.0",
    "grunt-contrib-jshint": "^0.11.3",
    "grunt-contrib-uglify": "^0.9.2"
  }
}

示例中name为当前工程名称,version工程版本信息,devDependencies为依赖项(即Grunt和相关插件)。注意,这里的版本号前面有一个^符号,表示该插件可以被Grunt自动更新到最新的子版本。
关于配置文件的说明,详见:https://docs.npmjs.com/files/package.json

配置构建任务

在项目根目录下新建构建任务描述文件Gruntfile.js。具体示例如下:

module.exports = function(grunt) {  
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),   //加载配置文件 
    uglify: {
      options: { },
      buildall: {//按原文件结构压缩js文件夹内所有js文件
          options: {
            preserveComments:false,
            report: "min"//输出压缩率,可选的值有 false(不输出信息),gzip
          },
          files: [{
              compress:false,
              expand:true,
              cwd:'js',//js目录下
              src:'**/*.js',//所有js文件
              dest: 'dist/js'//输出到此目录下
          }]
      },
      ueditor: {//单独压缩ueditor.all.js文件
          options: {
            preserveComments:false,
            report: "min"
          },
          files: [{
              compress:false,
              src:'vender/ueditor/ueditor.all.js',
              dest: 'vender/ueditor/ueditor.all.min.js'
          }]
      }
    },
    cssmin: {
      compress: {//按原文件结构压缩css文件夹内所有css文件
        files: [{
               expand: true,
               cwd: 'css/',
               src: '**/*.css',
               dest: 'dist/css'
         }]
      },
      adminlte: {//单独压缩AdminLTE.css文件
          files: [{
              src:'vender/AdminLTE/AdminLTE.css',
              dest: 'vender/AdminLTE/AdminLTE.min.css'
          }]
      }
    }  
  });
  // 加载包含 "uglify" 任务的插件。
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-cssmin');
  // 默认被执行的任务列表。
  grunt.registerTask('default', ['uglify','cssmin:compress','cssmin:adminlte']);
};

上述代码实现了js目录下所有js文件的压缩,css目录下的所有css文件的压缩。文件主题是module.exports = function(grunt) { };函数内部主要有三部分:初始化参数,加载插件,注册构建任务。

  1. 初始化参数
    pkg属性,指定具体加载的配置文件,默认的必选项。uglify和cssmin是自己定义的任务,名称也是自定义的。
  2. 加载插件
    加载指定的插件。
  3. 注册构建任务
    default是任务名称,[]中是具体构建项,按照先后顺序执行。可以是一个任务集合'uglify',也可以是一个具体的任务'cssmin:compress'。

执行构建

在命令行控制台里,切换到项目根目录。执行grunt,即可执行default任务。执行“grunt cssmin:adminlte”,即可执行具体的一个任务。执行“grunt uglify”即可执行一个任务集合。

这里只是对grunt的一个概括介绍,配置的详细参数,具体插件的配置,后续在其他帖子里描述。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容