Gruntjs随笔

Q:Grunt为何物?

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

Q:啥是构建工具?

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

Q:grunt是如何工作的?

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

  • clean:删除临时文件

  • uglify:压缩

  • qunit:测试

  • concat:合并

 

1、建立 package.json 文件(内容如下),然后运行 npm install 安装其相关依赖的包。

{

    "name": "the-project-of-name",

    "version": "0.0.1",

    "author": "Jankerli <[email protected]>",

    "description": "the-project-of-description",

    "dependencies": {

        "grunt": "*",

        "grunt-contrib-less": "*",

        "grunt-contrib-watch": "*",

        "grunt-contrib-uglify": "*",

        "grunt-contrib-cssmin": "*",

        "grunt-contrib-copy": "*"

    }

}

2、建立 Gruntfile.js 文件(如下内容请根据具体项目稍作修改),然后运行 grunt,就会在其根目录下看到 dest 文件夹了,去看看你需要的文件是否都在里面了?

module.exports = function (grunt) {

 

    grunt.initConfig({

 

        pkg: grunt.file.readJSON('package.json'),

 

        // 编译 LESS 文件

        less: {

            compile: {

                files: {

                    'assets/css/app.css': 'assets/css/app.less'

                }

            }

        },

 

        // 压缩 CSS 文件

        cssmin: {

            options: {

                report: 'gzip'

            },

            combine: {

                files: {

                  'assets/css/app.min.css': 'assets/css/app.css'

                }

            }

        },

 

        // 压缩合并 JS 文件

        uglify: {

            options: {

                report: 'gzip',

                mangle: true, // Specify mangle: false to prevent changes to your variable and function names.

                banner: '/** \n' +

                        ' * -------------------------------------------------------------\n' +

                        ' * Copyright (c) 2013 Jankerli, All rights reserved. \n' +

                        ' * http://www.jankerli.com/ \n' +

                        ' *  \n' +

                        ' * @version: <%= pkg.version%> \n' +

                        ' * @author: <%= pkg.author%> \n' +

                        ' * @description: <%= pkg.description%> \n' +

                        ' * ------------------------------------------------------------- \n' +

                        ' */ \n\n'

            },

            myTarget: {

                files: {

                    'assets/js/lib/libs.min.js': ['assets/js/lib/jquery-1.9.1.min.js',

                                                  'assets/js/lib/underscore-min.js',

                                                  'assets/js/lib/backbone-min.js'],

 

                    'assets/js/app.min.js': ['assets/js/app.js',

                                             'assets/js/tpls.js',

                                             'assets/js/view.js',

                                             'assets/js/router.js']

                }

            }

        },

 

        // 复制文件,打包到 dest 文件夹目录下

        copy: {

            main: {

                files: [

                    {src: 'index.html', dest: 'dest/index.html'},

                    {src: ['assets/images/**'], dest: 'dest/'},

                    {src: ['assets/css/app.min.css'], dest: 'dest/'},

                    {src: ['assets/js/lib/libs.min.js'], dest: 'dest/'},

                    {src: ['assets/js/app.min.js'], dest: 'dest/'}

                ]

            }

        },

 

        // 监控 LESS 文件

        watch: {

            scripts: {

                files: ['assets/css/*.less'],

                tasks: ['less', 'cssmin']

            }

        }

 

    });

 

    grunt.loadNpmTasks('grunt-contrib-less');

    grunt.loadNpmTasks('grunt-contrib-uglify');

    grunt.loadNpmTasks('grunt-contrib-cssmin');

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

    grunt.loadNpmTasks('grunt-contrib-copy');

 

    grunt.registerTask('default', ['less', 'cssmin', 'uglify', 'copy']);

 

};

你可能感兴趣的:(grunt)