• 关于Grunt


    简介

    Q:Grunt为何物?

    A:一个专为JavaScript提供的构建工具。

    Q:啥是构建工具?

    A:在项目部署上线前,通常要将源文件压缩,合并,并拷贝到bch或trunk中。
    在将js模块化后,又多了一个分析,提取业务代码中所依赖模块的工作。
    解决这一系列繁重工作的自动化工具,称之为构建工具。

    Q:grunt是如何工作的?

    A:刚刚接触grunt,举个例子可能不太恰当,但应该可以让你先比较准确的认识她。
    就好像一个万能工厂(grunt),只负责执行任务(Task),不关心每个任务到底都干了什么。
    这些任务比如:

    • clean:删除临时文件

    • uglify:压缩

    • qunit:测试

    • concat:合并

    任务流程可能是这样的:

    • task:clean

    • task:uglify

    • task:qunit

    • task:concat

    安装

    前提是你已经安装了nodejsnpm。 你可以在 nodejs.org 下载安装包安装,也可以通过包管理器(比如在 Mac 上用 homebrew,同时推荐在 Mac 上用 homebrew)。

    安装grunt CLI

    npm install -g grunt-cli
    

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

    在项目中使用grunt

    首先需要往项目里添加两个文件:package.jsonGruntfile.js

    • package.json:该文件用来为npm存放项目配置的元数据,与grunt关系最大的配置在devDependencies中。
    "devDependencies": {
            "grunt": "~0.4.1",
            "grunt-cmd-transport": "~0.2.0",
            "grunt-cmd-concat": "~0.2.0",
            "grunt-contrib-uglify": "~0.2.0",
            "grunt-contrib-clean": "~0.4.0"
        }
    
    • Gruntfile.js:注意G的大写,这个文件就是grunt的配置了,其中详细定义了每个任务的细节和执行任务的顺序等。

    安装grunt

    在命令行进入项目所在目录,键入如下命令即可,npm会根据devDependencies中的配置,将需要的grunt及其插件下载到你的项目目录中。

    npm install grunt --save-dev
    

    传说中简单的配置T-T

    终于到了简单配置环节,就从Gruntfile.js入手,一点点的认识grunt

    一个几乎是Gruntfile.js通用的写法:

        module.exports = function(grunt) {
          grunt.initConfig({
            pkg: grunt.file.readJSON('package.json');
          });
        };
    

    由于篇幅关系,这里只简单说下。grunt配置的主体都在grunt.initConfig

    pkg: grunt.file.readJSON('package.json')是为了以后在其它任务(task)中方便读取package.json已经定义好的值。

    下面我们来了解下任务(task):

        transport: {
                dialog: {
                    files : [
                        {
                            src : '*',
                            dest : '.build/styles/component/dialog/src'
                        }
                    ]
                }
            }
    

    transport就是一个任务(task),她是这次spm2所提供的一系列grunt构建插件的其中一个,该插件主要负责提取模块中的依赖,
    并为每个模块设置模块IDdialog是任务的其中一个目标(Target),files中定义了要对哪些文件执行该任务(src),
    以及执行任务后,生成的文件放在什么地方(dest)。

    下一个任务是合并(concat):

        concat: {
                dialog: {
                    files: {
                        "dist/styles/component/dialog/src/dialog.js": [".build/styles/component/dialog/src/dialog.js"]
                    }
                }
            }
    

    concat的内容是合并依赖的模块,有很多需要设置的地方,因为本文档目的只是介绍grunt
    所以这里简单说,该配置采用了另外一种srcdest的写法。相信大家只要理解了任务(task)和目标(target)后应该很好理解。

    最后,加载grunt需要的插件:

        grunt.loadNpmTasks('grunt-cmd-transport');
        grunt.loadNpmTasks('grunt-cmd-concat');
    

    还要告诉grunt该怎么执行这些任务:

        grunt.registerTask('build', ['transport', 'concat']);
    

    完整的Gruntfile.js

        module.exports = function(grunt) {
              grunt.initConfig({
                pkg: grunt.file.readJSON('package.json'),
    
                transport: {
                            dialog: {
                                files : [
                                    {
                                        src : '*',
                                        dest : '.build/styles/component/dialog/src'
                                    }
                                ]
                            }
                        },
                concat: {
                            dialog: {
                                files: {
                                    "dist/styles/component/dialog/src/dialog.js": [".build/styles/component/dialog/src/dialog.js"]
                                }
                            }
                        }
              });
    
              grunt.loadNpmTasks('grunt-cmd-transport');
              grunt.loadNpmTasks('grunt-cmd-concat');
    
              grunt.registerTask('build', ['transport', 'concat']);
            };
    
    

    最后的最后,进入项目所在目录,命令行输入:

    grunt build
    

    一切顺利的话,你就可以看到变化了!

  • 相关阅读:
    实现 ajax 多项选择框
    Ajax 文件上传之PHP心得
    php tree生成树分享
    基于JQuery框架的AJAX
    jQuery Ajax 全解析
    asp 下载函数
    10元奥运纪念钞明发行 与人民币等值流通
    jQuery(Ajax)/PHP/MySQL实现搜索自动提示功能
    隔行扫描和逐行扫描(interlace and progressive )
    VGA 输出调试
  • 原文地址:https://www.cnblogs.com/fang51/p/4106070.html
Copyright © 2020-2023  润新知