Grunt入门教程之学习笔记

我现在在几个小项目中一直在使用Node.js。在Node系统中有一些很强大的工具。我最喜欢的一个例子就是Grunt。

Grunt是一种工具,允许您定义任务,然后通过命令运行他们,在命令行中运行:

 代码如下 复制代码
grunt watch

这将启动一个watch任务,用来监控文件,我已经指定和运行指定的任务,只要这些文件变化了,就能监控到。在我的例子中,我已经在Grunt设置了只要当.js文件改变了就能检测JavaScript语法和压缩JavaScript和当.scss文件改变就能将Sass文件编译成CSS的任务。

这里介绍了如何设置。

安装Grunt
首先你需要先安装Grunt CLI,这是Grunt命令的接口。这将可以在命令行中使用Grunt命令:

 代码如下 复制代码
$ npm install -g grunt-cli

注意:由于我们使用Grunt CLI,Grunt必须安装在每个项目的基础上。这允许您在不同的项目是运行不同版本的Grunt。如果您之前全局安装了Grunt,那么你应该先卸载它:

 代码如下 复制代码
$ npm uninstall -g grunt

安装需要的依赖关系
接下来,您需要设置运行Grunt需要的所有依赖项。在这个例子中你需要grunt,grunt-contrib-jshint(检测js文件),grunt-contrib-uglify(压缩js文件),grunt-contrib-sass(编译你的Sass)。安装这些依赖项目,你需要在你的项目中的根目录下设置一个package.json文件:

 代码如下 复制代码
{
    "name":"Grunt-Example",
    "description": "Example project to demonstrate Grunt.",
    "version":"0.1.0",
    "private": true,
    "author": {
        "name": "Blake Haswell",
        "email": "blake.haswell@simpleweb.com.au"
    },
    "devDependencies": {
        "grunt": "~0.4.0",
        "grunt-contrib-sass": "*",
        "grunt-contrib-jshint": "*",
        "grunt-contrib-uglify": "*",
        "grunt-contrib-watch": "*"
    }
}

一旦你创建好了这个文件,你可以在你的项目目录下运行npm install命令安装所需要的依赖项:

 代码如下 复制代码
$ npm install

设置Gruntfile.js
现在你需要创建一个"Gruntfile"。在这你可以定义你的任务。

首先在你的项目根目录下创建一个Gruntfile.js文件。创建Gruntfile真的很简单,我们只需要定义一个CommonJS模块。当需要改变我们的Grunt配置时,我们只需要修改这个模块。

 代码如下 复制代码
module.exports = function(grunt){
    //Grunt配置写在这里
}

接下来,设置你的第一个任务:JSHint。在Grunt中设置任务,需要运行grunt.initConfig()方法,并通过每个对象设置你的任务。例如,这里介绍了如何设置JSHint:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        }

 

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
};

正如你看到的,你一个对象中包含了JSHint任务。JSHint是一个多任务,所以这意味着你可以定义多个JSHint任务。在这种情况下JSHint只有一个任务:all。JSHint的all任务指定文件被linted,以及这个选项也适用于lint。

还有,你有没有注意到在底部通过grunt.loadNpmTasks('grunt-contrib-jshint')调用任务。该方法可以从node_modules/中加载grunt-contrib-jshint任务,让它可以使用你的配置。

现在你可以很容易的lint你的JavaScript文件:

$ grunt jshint
很酷,不是吗?你甚至可以创建watch任务,监测JavaScript文件和自动lints文件——当文件失败后会提配你。

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //watch
        watch: {
            jshint: {
                files: 'javascripts/**/*.js',
                tasks: 'jshint'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
};

现在你执行grunt watch和开始修改你的JavaScript。你保存了你的文件并且lint失败后,将会通知你。在一个跨团队的开发执行编码的标准是一个伟大的方式,它节省时间捕捉觉错误。

Grunt不只是可以用于lint你的代码,你可快速设置任务压缩你的JavaScript:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //Uglify
        uglify: {
            all: {
                files: {
                    'public/javascripts/all.min.js':'javascripts/**/*.js'
                }
            }
        },

        //watch
        watch: {
            jshint: {
                files: 'javascripts/**/*.js',
                tasks: 'jshint'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-uglify');
};

可以编译你的Sass:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //Uglify
        uglify: {
            all: {
                files: {
                    'public/javascripts/all.min.js':'javascripts/**/*.js'
                }
            }
        },

        //Sass
        sass: {
            options: {
                style: 'compressed',
                precision: 5
            },
            all: {
                files: {
                    'public/stylesheets/style.css':'sass/style.scss'
                }
            }
        },

        //watch
        watch: {
            jshint: {
                files: 'javascripts/**/*.js',
                tasks: 'jshint'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-sass');
};

然后,你可以将任务添加到你的watch任务,将可以自动执行这些任务:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //Uglify
        uglify: {
            all: {
                files: {
                    'public/javascripts/all.min.js':'javascripts/**/*.js'
                }
            }
        },

        //Sass
        sass: {
            options: {
                style: 'compressed',
                precision: 5
            },
            all: {
                files: {
                    'public/stylesheets/style.css':'sass/style.scss'
                }
            }
        },

        //watch
        watch: {
            javascript: {
                files: 'javascripts/**/*.js',
                tasks: ['jshint','uglify']
            },
            sass: {
                files: 'sass/**/*.scss',
                tasks: 'sass'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-sass');
};

现在,每次Sass文件修改保存后将会重新编译成CSS,每次JavaScript文件修保存后将会自动lint和压缩。

这样编码很爽吧,很开心吧!

时间: 2024-10-02 17:40:06

Grunt入门教程之学习笔记的相关文章

php入门教程xml学习笔记

明确目标: 1.理解xml的结构:2.如何动态建立xml文件:3.如何读取和修改xml文件 一. xml的结构是树形结构: 这个好理解.简单写一个:  1 <pictures> 2   <picture> 3      <id>1</id> 4      <name>pic 1</name> 5   </picture> 6   <picture> 7      <id>2</id> 8

andengine入门教程之学习笔记

例子中主程序.launcher.ExampleLauncher主要继承自ExpandableListActivity的列表, 这里主要定义了另个枚举public enum ExampleGroup和enum Example ,平时因为像他们这样使用比较少,值得学习.  代码如下 复制代码 enum Example { // =========================================================== // Elements // ============

mysql数据库入门教程之学习笔记

mysql复习  一:复习前的准备  1:确认你已安装wamp  2:确认你已安装ecshop,并且ecshop的数据库名为shop     二   基础知识:  1.数据库的连接  mysql -u -p -h  -u 用户名  -p 密码  -h host主机  2:库级知识  2.1 显示数据库: show databases;  2.2 选择数据库: use dbname;  2.3 创建数据库: create database dbname charset utf8;  2.3 删除数

MySQL入门教程之学习笔记

慢速SQL:执行时间超过给定时间范围的查询就称为慢速查询. 在MySQL中如何记录慢速SQL? 答:可以在my.cnf中设置如下信息:   1 [mysqld]  2 ; enable the slow query log, default 10 seconds  3 log-slow-queries  4 ; log queries taking longer than 5 seconds  5 long_query_time = 5  6 ; log queries that don't u

javascript入门教程之学习笔记

呵呵,,好久没写文章了,,近来接触js比较多久顺便写个与js相关的文吧. 嗯,今天就谢谢与变量相关的东东吧,变量这东西只要你是敲代码的天天都得接触呢. 有人说变量有啥好写的?我不会告诉你Javascript里的变量很奇怪呢,没好好学一遍真的会被搞晕掉的. 好,先拿一篇已存的文,个人感觉写的还可以. 1.变量类型:基本类型和引用类型     在js 中,基本类型:Number,Boolen,null,String,Underfined 存放在栈内存中,数据长度是固定的.     而引用类型,Obj

Grunt入门教程(自动任务运行器)_javascript技巧

在Javascript的开发过程中,经常会遇到一些重复性的任务,比如合并文件.压缩代码.检查语法错误.将Sass代码转成CSS代码等等.通 常,我们需要使用不同的工具,来完成不同的任务,既重复劳动又非常耗时.Grunt就是为了解决这个问题而发明的工具,可以帮助我们自动管理和运行各种任 务. 简单说,Grunt是一个自动任务运行器,会按照预先设定的顺序自动运行一系列的任务.这可以简化工作流程,减轻重复性工作带来的负担. ## 安装 Grunt基于Node.js,安装之前要先安装Node.js,然后

js入门教程[Javascript学习第一季]

Javascript学习第一季(2) 上篇文章讲了js中的一些概念(词法结构) 和 数据类型(部分). 这章我们 继续.然后了解下js中操作数据 和 函数的 作用域.  1,对象跟基本类型之间的转换: 不管何时,只是对象非空,在布尔环境中都为true. 如; new Boolean(false);  new Number(0); new String(""); new Array(); 上面虽然内部值是false,但对象的值是true; Object à valueOf() à toS

php入门篇-php学习笔记

使用PHP的mysql方法 PHP从一开始就提供了MySQL的函数库.很多程序都依赖于mysql_connect.mysql_query.mysql_fetch_assoc等等,但是PHP手册中建议: 如果你使用的MySQL版本在4.1.3之后,那么强烈建议使用mysqli扩展. mysqli,或者说MySQL的高级扩展,有一些优点: 有面向对象的接口 prepared statements(预处理语句,可以有效防止SQL-注入攻击,还能提高性能) 支持多种语句和事务 另外,如果你想支持多数据库

PL/SQL学习笔记(索引贴)

我前段时间写了T-SQL学习笔记得到了许多朋友的支持当然也有一些朋友提出了质疑,在此一并表示感谢最近项目中用到Oracle,于是萌生了写PL/SQL学习笔记的念头.同时也希望得到大家的支持或批评.并非常希望能和朋友们一起讨论相关知识. 这是一个有一点T-SQL基础的.刚入门者的学习笔记,以Oracle  10g为讲解对象没有涉及到高级话题如果对哪篇文章有疑问,可以在文章下留言我会尽快回复的 下面我为这个系列文章做一个索引 一: 常量变量及数据类型初步       1:常量变量       2:数