前端自动化开发之grunt

上篇文章介绍了前端模块化开发工具seaJs,利用seaJs我们可以轻松实现前端的模块化编程,参见http://www.cnblogs.com/luozhihao/p/4818782.html

那么今天我继续介绍前端开发的另一工具——grunt。关于介绍grunt文章网上已经存在很多,而本文主要结合自己的亲身实践来讲解利用grunt实现前端开发中代码的压缩及合并。

一、准备工作

再使用grunt之前,我们先要安装node.js,利用node的包管理工具npm来安装grunt

node.js下载地址:https://nodejs.org/en/

关于如何安装及配置node不属于本文涉及范畴,所以在这里不做介绍,需要查看的童鞋可以参照:http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/

二、安装grunt

安装配置完node后,我们利用npm来安装全局grunt,命令行如下:

完成后我们输入命令:grunt -ver 来查看grunt的版本,如果现实版本信息,则说明安装成功了:

ok,下一步是在你自己的项目文件中局部安装grunt

安装之前先在项目目录下新建两个文件Gruntfile.js及package.json用来配置grunt

在package.json中将如下代码粘贴进去并保存:

{
  "name": "luozh",
  "file": "zepto",
  "version": "0.1.0",
  "description": "demo",
  "license": "MIT",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-clean": "~0.5.0",
    "grunt-contrib-concat": "^0.5.1",
    "grunt-contrib-copy": "~0.4.1",
    "grunt-contrib-jshint": "~0.6.3",
    "grunt-contrib-requirejs": "~0.4.1",
    "grunt-contrib-uglify": "~0.2.1",
    "grunt-contrib-cssmin": "~0.12.3",
    "grunt-strip": "~0.2.1"
  },
  "dependencies": {
    "express": "3.x"
  }
}

完了之后,我们在package.json的同级目录下输入命令行npm install:

之后我们会看到文件夹下又多了一个名为node_modules的文件夹

没错,里面放置的就是刚刚我们package.json里所配置的功能文件了。

ok,到了这里我们的grunt的安装就到此结束。

三、配置grunt

安装完成之后,我们需要对我们需要利用grunt实现的功能进行配置,比如我们需要调用哪些功能、文件原始路径、文件名及存放路径等。

这里我们就要用到刚刚提到的Gruntfile.js文件了,下面以配置压缩js功能为例:

module.exports = function (grunt) {
  // 项目配置
  grunt.initConfig({
    pkg: grunt.file.readJSON(‘package.json‘),
    uglify: {
        options : {
            banner : ‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n‘
        },
         my_target: {
            files: [
                {
                    expand: true,
                    //src相对路径 对dest无用
                    cwd: ‘app/src/‘,
                    //src: ‘*.js‘,
                    src: [‘demo.js‘, ‘untils.js‘],  //不包含某个js,某个文件夹下的js
                    dest: ‘app/src/dist/‘,  //最后/不能省略
                    rename: function (dest, src) {
                              var folder = src.substring(0, src.lastIndexOf(‘/‘));
                              var filename = src.substring(src.lastIndexOf(‘/‘), src.length);
                              //  var filename=src;
                              filename = filename.substring(0, filename.lastIndexOf(‘.‘));
                              var fileresult=dest + folder + filename + ‘.min.js‘;
                              grunt.log.writeln("现处理文件:"+src+"  处理后文件:"+fileresult);  

                              return fileresult;
                              //return  filename + ‘.min.js‘;
                          }
                }
            ]
        }
    }
  });
  grunt.loadNpmTasks(‘grunt-contrib-uglify‘);
  // 默认任务
  grunt.registerTask(‘default‘, [‘uglify‘]);
}

以上需要修改的是:

cwd: ‘app/src/‘ 改成你需要压缩js的目录

src: [‘demo.js‘, ‘untils.js‘] 改成你需要压缩的js文件名,多个以数组形式存放

dest: ‘app/src/dist/‘ 改成你所要输出压缩后js的文件目录

配置完成后找到自己所要压缩文件的目录,执行命令:grunt uglify就ok了

显示Done, without errors 就表示压缩成功

同理,我们还可以合并js,配置如下:

module.exports = function (grunt) {
  // 项目配置
  grunt.initConfig({
    pkg: grunt.file.readJSON(‘package.json‘),
    concat: {
      options: {

      },
      dist: {
        src: [‘app/src/demo.js‘, ‘app/src/untils.js‘],
        dest: ‘app/src/dist/libs.js‘
      }
    },
    uglify: {
        options : {
            banner : ‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n‘
        },
         my_target: {
            files: [
                {
                    expand: true,
                    //src相对路径 对dest无用
                    cwd: ‘app/src/‘,
                    //src: ‘*.js‘,
                    src: [‘demo.js‘, ‘untils.js‘],  //不包含某个js,某个文件夹下的js
                    dest: ‘app/src/dist/‘,  //最后/不能省略
                    rename: function (dest, src) {
                              var folder = src.substring(0, src.lastIndexOf(‘/‘));
                              var filename = src.substring(src.lastIndexOf(‘/‘), src.length);
                              //  var filename=src;
                              filename = filename.substring(0, filename.lastIndexOf(‘.‘));
                              var fileresult=dest + folder + filename + ‘.min.js‘;
                              grunt.log.writeln("现处理文件:"+src+"  处理后文件:"+fileresult);  

                              return fileresult;
                              //return  filename + ‘.min.js‘;
                          }
                }
            ]
        }
    }
  });
  grunt.loadNpmTasks(‘grunt-contrib-uglify‘);
  grunt.loadNpmTasks(‘grunt-contrib-concat‘);
  // 默认任务
  grunt.registerTask(‘default‘, [‘uglify‘, ‘concat‘]);
}

添加了concat配置,利用grunt.loadNpmTasks(‘grunt-contrib-concat‘)将concat功能load进来,并包含到grunt.registerTask任务中去,

如果没有这一功能需要进行下载,同时需要在package.json进行配置,

最后执行grunt concat就ok了,如果需要同时进行压缩和合并,那么执行命令grunt就ok了~

当然,grunt除了能实现js压缩合并外,还能实现css压缩、图片压缩等等一系列功能,在这里就不一一介绍了,

所有功能的实现都需要事先安装及配置后才能使用,

关于其他功能插件的安装及配置方法可以参见grunt官网的插件列表 http://www.gruntjs.net/plugins

可以说利用grunt减轻了我们对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等方面的工作量,像grunt这样的前端自动化工具还有很多,比如gulp,

同时结合yeomen、bower等前端工具可以实现更为强大的自动化流程,让前端得以工程化。

之后我会介绍yeomen、bower、grunt相结合的自动化构建方法,欢迎关注。

原创文章,转载请注明来自一个萝卜一个坑  -博客园[http://www.cnblogs.com/luozhihao]

本文地址:http://www.cnblogs.com/luozhihao/p/4848709.html

时间: 2024-12-06 14:13:53

前端自动化开发之grunt的相关文章

前端模块化开发之seaJs

了解后端语言的童鞋一定听过模块化开发的概念,比如java.python等后端语言都有自己的模块化特性,然而和后端语言相比,javascript还尚未实现模块化的功能,虽然之后的更高版本可能引入模块化开发的概念,但是现阶段我们可以通过第三方控件来实现. 今天我就来给大家介绍下可以帮助我们实现前端模块化的工具——seaJs.如果对seaJs已经有实际使用经验的小伙伴可以直接忽略这篇文章. 如果有小伙伴了解requireJs,那么学习seaJs会相当的容易,因为requireJs也是前端模块化的构建工

前端自动化之利剑——Grunt

JavaScript的世界里一切皆模块. 一切要从NodeJs说起,说起NodeJs就不得不说npm.Express,npm是NodeJs的包管理工具,Express是基于NodeJs的开发框架,一步步安装完NodeJs后就已经安装好npm了,然后你可以npm install -g express-generator来安装最新版的Express4.x:这里不说Express了:来通过npm安装Grunt,npm install -g grunt-cli全局安装grunt命令行工具,要正式使用Gr

前端自动化构建工具Grunt

一.了解Gurnt(http://www.open-open.com/lib/view/open1433898272036.html) Grunt 是一个基于任务的JavaScript工程命令行构建工具. Grunt和Grunt插件,是通过npm安装并管理的,npm是Node.js的包管理器. 了解Grunt前,首先要准备两件事: 1.了解npm(Node Package Manager):npm是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准. 2.安装nod

前端基础开发之HTML

简介:                                                                                1.HTML是什么? htyper text markup language  即超文本标记语言. 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言. 2.什么是标签: 是由一对尖括号包裹的单词构成 例如: <html> *所有标签中的单词不可能以数字开头. 标签不区分大小

前端自动化之神器 — Gulp

Nodejs不仅把Javascript带到了服务端,也在前端掀起了自动化的浪潮,推动了前端工作的历史性巨变,今天和大家一起学习前端自动化的神器---Gulp; 说起自动化,自然少不了Grunt,这位前辈目前社区完善,拥有几千个现成插件,install下来参考文档即可配置使用(参见:前端自动化之利剑——Grunt):而Gulp的出现,希望取其精华并取代Grunt,成为最流行的Javascript构建工具,Gulp采用代码优于配置的策略,让简单的事继续简单,让复杂的事变得可管理: 与Grunt的不同

前端自动化工具 grunt 插件的简单使用(一)

Grunt 的简介: Grunt 是一套前端自动化工具,是一个基于 node.js 的命令行工具,它一般用于: 1.压缩文件: 2.合并文件: 3.简单的语法检测: 4.监听文件变动: 5.less 编译: PS:Grunt 官网 (https://gruntjs.com/).Grunt  就像是一个工具箱,拥有非常丰富的任务插件,可以帮助开发人员实现各种各样目标任务的构建.在Grunt工具箱中,按目标任务类型我们可以分为: 1.编译文档型:比如编译 LESS.Sass.Stylus.Coffe

Grunt安装配置教程:前端自动化工作流

Grunt这货是啥? Grunt 是一个基于任务的 JavaScript 项目命令行构建工具. 最近很火的前端自动化小工具,基于任务的命令行构建工具 http://gruntjs.com Grunt能帮我们干啥? 在开始介绍前,先向大家描述下面的场景: [场景1:项目开始前] 先建立一个 projA 的文件夹 再建 html css js images (建5个或以上文件夹,花费1分钟) 拷贝 CSS库(Yui Reset bootstrap)JS库(Requiet.js Seajs jQuer

移动平台前端开发之WebApp代码技巧

1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport" /> <meta content="yes" name="apple-mobile-web

前端自动化grunt的使用

作为前端开发人员,有必要也有义务掌握前端自动化工具grunt: 这样可以极大地降低前端的复杂工作,提高工作效率,把所有的精力都投入到 编码中去. grunt API列表 config event fail file log option task template util 在使用grunt构建前端自动化中,我主要使用的config.file.template以及util这几个API. 现在贴一份gruntfilejs代码,基本上前端的自动化工作都可以完成: 'use strict' var A