前端自动化grunt的使用

  作为前端开发人员,有必要也有义务掌握前端自动化工具grunt;

这样可以极大地降低前端的复杂工作,提高工作效率,把所有的精力都投入到

编码中去。

grunt API列表

  • config
  • event
  • fail
  • file
  • log
  • option
  • task
  • template
  • util

在使用grunt构建前端自动化中,我主要使用的config、file、template以及util这几个API。

现在贴一份gruntfilejs代码,基本上前端的自动化工作都可以完成:

‘use strict‘

var ASSETS_DIR = ‘assets/‘;
module.exports = function(grunt) {

    grunt.initConfig({
        pkg: grunt.file.readJSON(‘package.json‘),

        /* jsdoc生成js文档 */
        jsdoc: {
            dist: {
                src: [‘assets/scripts/test.js‘],
                options: {
                    destination: ‘docs‘
                }
            }
        },

        /* css代码合并 */
        concat: {

        }
    });

    /*grunt-contrib-less模块,使用less预编译css文件*/
    grunt.config.merge({
        less: {
            dev: {
                files: [{
                    expand: true,
                    cwd: ASSETS_DIR + ‘less/‘ + ‘./‘,
                    src: [‘*.less‘],
                    dest: ASSETS_DIR + ‘css‘,
                    ext: ‘.css‘
                }]
            },
            bootstrap: {
                files: {
                    ‘assets/css/bootstrap.css‘: ‘assets/less/bootstrap/bootstrap.less‘
                }
            }
        }
    });

    /*grunt-contrib-sprite模块,生成雪碧图*/
    grunt.config.merge({
        sprite: {
            options: {
                banner: ‘/*<%=pkg.name %> <%=grunt.template.today("yyyy-mm-dd")%>*/‘
            },
            all: {
                src: [ASSETS_DIR + "images/sprites/*.png"],
                engine: require(‘pixelsmith‘),
                dest: ASSETS_DIR + "images/sprite.png",
                destCss: ASSETS_DIR + "css/sprite.css",
                padding: 10,
                algorithm: "binary-tree",
                cssVarMap: function(sprite) {
                    var iconIndex, activeIndex;
                    iconIndex = sprite.name.indexOf(‘icon-‘);
                    activeIndex = sprite.name.lastIndexOf(‘-active‘);
                    if (activeIndex > 0) {
                        // sprite.name=sprite.name.replace(sprite.name.substr(activeIndex),":active");
                    }
                    if (iconIndex === 0) {
                        sprite.name = sprite.name.replace(sprite.name.substr(0, 5), ‘‘);
                    }
                }
            }
        }
    });

    /*grunt-contrib-cssmin模块,压缩css文件*/
    grunt.config.merge({
        cssmin: {
            add_banner: {
                options: {
                    banner: ‘/* minify the css file <%= grunt.template.today("yyyy-mm-dd") %> */‘
                },
                files: {
                    ‘assets/css/output.css‘: [ASSETS_DIR + ‘css/bootstrap.css‘, ASSETS_DIR + ‘css/home.css‘]
                }
            },
            minify: {
                options: {
                    banner: ‘/* minify the css file\n Author:lidasong\n Time: <%= grunt.template.today("yyyy-mm-dd") %>*/‘
                },
                expand: true,
                cwd: ASSETS_DIR + ‘dest/css/‘,
                src: [‘*.css‘, ‘!*.min.css‘],
                dest: ASSETS_DIR + ‘dest/release‘,
                ext: ‘.min.css‘
            }
        }
    });

    /**js、css代码检测工具,
     *grunt-contrib-jshint模块、grunt-contrib-csslint模块
     **/
    grunt.config.merge({
        jshint: {
            all: {
                options: {
                    ‘-W069‘: true,
                    ‘-W064‘: true,
                    ‘-W040‘: true
                },
                src: [‘assets/scripts/*.js‘, ‘assets/scripts/module/*.js‘, ‘assets/scripts/util/*.js‘]
            }
        },
        csslint: {
            strict: {
                options: {
                    import: false
                },
                src: [ASSETS_DIR + ‘css/*.css‘]
            }
        }
    });

    /*grunt-contrib-uglify模块,压缩js文件*/
    grunt.config.merge({
        uglify: {
            jscomp: {
                files: [{
                    expand: true,
                    cwd: ASSETS_DIR + ‘scripts‘,
                    src: ‘**/*.js‘,
                    dest: ASSETS_DIR + ‘dest/scripts‘
                }]
            }
        },
    });

    /*grunt-contrib-copy模块,文件复制*/
    grunt.config.merge({
        copy: {
            release: {
                options: {
                    process: function(content, srcpath) {},
                    timestamp: true
                },
                expand: true,
                cwd: ASSETS_DIR + ‘dest/‘,
                src: [‘**‘],
                dest: ASSETS_DIR + ‘release‘
                // flatten:true,
                // filter:‘isFile‘
            }
        }
    });

    /*grunt-contrib-clean模块,清除文件*/
    grunt.config.merge({
        clean: {
            concatCss: {
                options: {
                    force: true
                },
                src: [ASSETS_DIR + ‘dest/css/‘]
            },
            miniCss: {
                options: {
                    force: true
                },
                src: [ASSETS_DIR + ‘dest/release/‘]
            }
        }
    });

    /*grunt-contrib-watch模块,监控文件变化*/
    grunt.config.merge({
        watch: {
            ‘less-dev‘: {
                files: [ASSETS_DIR + ‘less/*.less‘, ASSETS_DIR + ‘less/partials/**/*.less‘],
                tasks: [‘less:dev‘]
            },
            ‘less-bootstrap‘: {
                files: [ASSETS_DIR + ‘less/lib/bootstrap/**/*.less‘],
                tasks: [‘less:bootstrap‘]
            }
        }
    });
    /*grunt-contrib-*模块加载*/
    require(‘load-grunt-tasks‘)(grunt);

    /*grunt注册任务列表*/
    grunt.registerTask(‘default‘, [‘less:dev‘, ‘watch:less-dev‘]);
    grunt.registerTask(‘bootstrap‘, [‘less:bootstrap‘]);
    grunt.registerTask(‘js-hint‘, ‘JS代码质量检查‘, [‘jshint‘]);
    grunt.registerTask(‘css-lint‘, ‘CSS代码质量检查‘, [‘csslint‘]);
    grunt.registerTask(‘all-concat‘, ‘css 代码合并‘, [‘clean:concatCss‘, ‘css-concat‘, ‘concat‘]);
    grunt.registerTask(‘minify-css‘, ‘CSS代码压缩‘, [‘clean:miniCss‘, ‘cssmin:minify‘]);
    grunt.registerTask(‘doc‘, ‘jsdoc生成js文档‘, [‘jsdoc‘]);
    grunt.registerTask(‘sprites‘, ‘生成雪碧图‘, [‘sprite:all‘]);
    grunt.registerTask(‘js-comp‘, ‘压缩js代码‘, [‘uglify:jscomp‘]);
    grunt.registerTask(‘copyCss‘, ‘复制合并压缩后的css‘, [‘copy:release‘]);
    grunt.registerTask(‘css-concat‘, ‘css代码合并‘, function() {
        grunt.file.expand(ASSETS_DIR + ‘css/*‘).forEach(function(dir) {
            var dirName = dir.substr(0, dir.indexOf(‘.‘)),
                concat = grunt.config.get(‘concat‘) || {};
            dirName = dirName.substr(dirName.lastIndexOf(‘/‘) + 1);
            if (grunt.file.isFile(dir)&&dirName !== ‘bootstrap‘ && dirName !== ‘sprite‘) {
                concat[‘options‘] = {
                    stripBanners: true,
                    banner: ‘/*合并css后的代码*/‘
                };
                concat[dirName] = {
                    src: [dir, ASSETS_DIR + ‘css/bootstrap.css‘],
                    dest: ASSETS_DIR + ‘dest/css/‘ + dirName + ‘.css‘
                };
                grunt.config.set(‘concat‘, concat);
            }
        });
    });
};
时间: 2024-07-30 10:03:20

前端自动化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

前端工作流程自动化——Grunt/Gulp 自动化

前端工作流程自动化--Grunt/Gulp 自动化 Grunt/Gulp 都是node.js下的模块,简单来说是自动化任务运行器,两者都有社区及大量的插件支撑,在所有的自动化工具领域里,这两者是最好的前端自动化构建工具. 那么问题来了,Grunt和Gulp到底哪家强?在回答这个问题前,先给大家看一组下面的数据: 再看看实现同样功能的配置代码: 作者本人之前一直使用Grunt来做自动化构建的,在Gulp出来后,经过一段时间的试用感觉配置比Grunt方便多了,如果你两者还没接触过,本人推荐直接使用G

前端自动化开发之grunt

上篇文章介绍了前端模块化开发工具seaJs,利用seaJs我们可以轻松实现前端的模块化编程,参见http://www.cnblogs.com/luozhihao/p/4818782.html 那么今天我继续介绍前端开发的另一工具——grunt.关于介绍grunt文章网上已经存在很多,而本文主要结合自己的亲身实践来讲解利用grunt实现前端开发中代码的压缩及合并. 一.准备工作 再使用grunt之前,我们先要安装node.js,利用node的包管理工具npm来安装grunt node.js下载地址

浅谈前端自动化构建

前言 现在的前端开发已经不再仅仅只是静态网页的开发了,日新月异的前端技术已经让前端代码的逻辑和交互效果越来越复杂,更加的不易于管理,模块化开发和预处理框架把项目分成若干个小模块,增加了最后发布的困难,没有一个统一的标准,让前端的项目结构千奇百怪.前端自动化构建在整个项目开发中越来越重要. 我们首先来回想一下之前我们是如何来开始做一个项目的. ① 首先要确定这个项目要使用什么样的技术来实现,然后开始规划我们的项目目录,接着就要往项目增加第三方库依赖,比如: 拷贝 CSS库(Yui Reset |

前端自动化之神器 — Gulp

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

前端自动化工具 -- gulp 使用简介

gulp是基于流的前端自动化构建工具. 之前也谈到了 grunt的用法,grunt其实就是配置+配置的形式. 而gulp呢,是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用. 同样的,也是包括基本用法和各插件的使用. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到某一工程目录下 跟grunt一般,也是需要package.json包依赖文件和一个入口文件 g

前端自动化工具 -- fis 使用简介

FIS也是一个新生的前端自动化工具,好下面就来简单介绍一下,真的好简单介绍啊.. 个人觉得FIS已经囊括了一个“大前端”的范畴. 先来看看别人怎么看FIS和Grunt和Gulp F.I.S在实际项目中的应用体验如何? 前端工具里面gulp和fis,有哪些优缺点? FIS和Grunt的区别 FIS入门很简单,提高难度也不大,因为官方已经提供了非常多的文档 围绕着最基本的三条命令 fis install <name> fis release [options] fis server <com

前端自动化构建——需求和工具选择

今天突然心血来潮,想把前端的一些人工工作流程自动化,其实之前已经在用grunt进行自动化构建,但总是觉得还是有些事情未做好.首先说说,前端平时需要做那些自动化吧: 1. 先讲HTML,每个项目每个页面都需要统一的头部,其他标题,关键字,作者等meta自行修改,body部分每个页面各自填充,但使用的框架统一. 2. CSS,我使用的是less来编写,所以需要编译成css,另外,编译过程,一些css属性需要自动添加浏览器前缀,例如border-radius,属性最好自动按照类型排序,一些css的编写