zoukankan      html  css  js  c++  java
  • 基于grunt前端工程化

    Grunt是什么

         grunt是基于nodejs的 前端工程构建工具。一位牛人的话“前端80%是工程问题,20%是技术问题”,grunt就为了解决前端开发的工程问题的。

    官网站点:http://gruntjs.com/

    使用前提 

    1.  安装nodejs 环境

          下载与系统对应的安装文件,window下下载Windows Installer (.msi)。

          官网: http://nodejs.org/

          双击安装,一路next就可以了。安装后在cmd里运行:node –v 检查是否安装成功。如果有问题,查看环境变量path中是否有nodejs的安装路径配置。

         2.   了解npm

         Npm是一个NodeJS包管理和分发工具,他提供了nodejs插件的依赖管理。

         官网:https://npmjs.org

         现在npm已经集成在nodejs的安装包,不需要单独安装了。

         常用npm命令:

         npm install xxx 安装模块

         npm install xxx -g 将模块安装到全局环境中

         npm ls 查看安装的模块及依赖

         npm ls -g 查看全局安装的模块及依赖

         npm uninstall xxx  (-g) 卸载模块

         npm cache clean 清理缓存

    构建基于grunt的前端开发工程

          基于grunt构建的前端工程能做很多事情,常见的有: 文件压缩,文件合并,less文件编译,sass文件编译,coffeeScript文件的编译等。具体见:http://gruntjs.com/

    在grunt官网站点的get start中可以看到如果一步一步构建一个grunt工程。

    安装grunt:

    npm install -g grunt-cli

    grunt 工程中主要的两个文件介绍:

    package.json 配置工程中依赖的所有grunt 插件

    例如:

    {
      "name": "grunDemo",
      "version": "0.1.0",
      "dependencies": {},
      "devDependencies": {
        "grunt": "*",
        "grunt-contrib-coffee": "~0.7.0",
        "grunt-contrib-watch": "~0.3.1",
        "grunt-contrib-uglify": "*",
        "grunt-contrib-concat": "~0.1.3",
        "grunt-contrib-cssmin": "~0.4.2",
        "grunt-contrib-clean": "~0.4.1",
        "grunt-contrib-copy": "~0.4.1",
        "grunt-contrib-less": "~0.7.0"
      }
    }

    如果工程中已经存在此文件,只需运行以下命令就可在相应的目录下面下载grunt的插件。

    npm install 

    如果package.json中还没有配置相应插件,安装时可以添加以下参数自动将插件配置到package.json文件。

    npm install XXX --save-dev

    Gruntfile.js 工程任务定义和运行控制文件。

    module.exports = function (grunt) {
    
        grunt.file.defaultEncoding = 'utf-8';
    
        // Project configuration.
        grunt.initConfig({
                pkg: grunt.file.readJSON('package.json'),
    
                //清空已经build的文件
                clean: {
                    build: {
                        src: ["./build/**/*"],
                        filter:"isFile"
                    }
                },
    
                //coffee文件编译路径配置
                coffee: {
                    compile: {
                        options: {
                            bare: true
                        },
                        expand: true,
                        cwd: './src/javascripts',
                        src: ['**/*.coffee'],
                        dest      : "./build/javascripts",
                        ext       : '.js',
                        flatten   : false
                    }
                },
                //复制文件
                copy: {
                    main: {
                        expand    : true,
                        cwd       : './src/javascripts/',
                        src       : ["**/*.js"],
                        dest      : "./build/javascripts"
                    }
                },
    
                //scss 文件编译配置
                compass: {
                    compile: {
                        options: {
                            sassDir   : "./src/stylesheets",
                            cssDir    : "./build/stylesheets",
                            debugInfo : false,
                            noLineComments : true,
                            outputStyle : 'compressed'
                        }
                    }
                },
                //编译less文件
                less: {
                    compile: {
                        options: {
                            paths: ['./build/stylesheets']
                        },
                        files: {
                            './build/stylesheets/indexLess.css': ['./src/stylesheets/index.less']
                        }
                    }
                },
    
                //合并文件
                concat: {
                    options: {
                        separator: ';'
                    },
                    array: {
                        files: {
                            "./build/javascripts/concatIndex.js": ['./src/javascripts/concat/a.js','./src/javascripts/concat/b.js']
                        }
                    }
                },
                //js压缩
                uglify: {
                    codegen: {
                        options: {
                            preserveComments: false,
                            //compress: true
                            // 用于将utf-8编码的文件转换为ascii编码,以防止js脚本在gbk页面上出错
                            //alternative,为用到的utf-8编码文件设置 charset='utf-8'
                            beautify:{
                                ascii_only:true
                            }
                        },
                        files: [
                            {
                                dest  : "./build/javascripts/index-min.js",
                                src   : ['./build/javascripts/index.js','./build/javascripts/concatIndex.js']
                            }
                        ]
                    }
                },
                //css压缩
                cssmin: {
                    //css: {
                    //    expand: true,
                    //    src: '**/*.css',
                    //    ext: "-min.css",
                    //    cwd: "./build/stylesheets/",
                    //    dest: "./build/stylesheets/"
                    //}
                    css: {
                        files: [
                            {
                                dest: "./build/stylesheets/index-min.css",
                                src: "./build/stylesheets/index.css"
                            },
                            {
                                dest: "./build/stylesheets/indexLess-min.css",
                                src: "./build/stylesheets/indexLess.css"
                            }
                        ]
                    }
                },
                //监控任务
                watch: {
                    compass: {
                        files: ["src/stylesheets/**/*.scss"],
                        tasks: ["compass:compile", "cssmin:css"]
                    },
                    coffee: {
                        files: ["./src/javascripts/**/*.coffee"],
                        tasks: ["coffee","uglify"]
                    }
                }
        });
        //加载grunt模块
        grunt.loadNpmTasks('grunt-contrib-watch');
        grunt.loadNpmTasks('grunt-contrib-uglify');
        grunt.loadNpmTasks('grunt-contrib-concat');
        grunt.loadNpmTasks('grunt-contrib-compass');
        grunt.loadNpmTasks('grunt-contrib-less');
        grunt.loadNpmTasks('grunt-contrib-cssmin');
        grunt.loadNpmTasks('grunt-contrib-clean');
        grunt.loadNpmTasks('grunt-contrib-copy');
        grunt.loadNpmTasks('grunt-contrib-coffee');
    
        grunt.registerTask('default', ["clean", "coffee", "concat", "uglify", "less", "compass", "cssmin"]);
    
    };
    

      

    sass环境配置

    demo工程中有sass相关编译和配置,所以这里也说下sass环境的配置

    1、安装ruby。在这里下载ruby安装包安装就可以。https://www.ruby-lang.org/zh_cn/  或者 http://rubyinstaller.org/

    2、安装compass。http://www.ruanyifeng.com/blog/2012/11/compass.html

         运行:

    gem install compass

    问题:

    安装compass时提示http 304 ,ruby版本过低,重新下载高版本的rubyinstaller。
    安装compass没有反应或者很慢,有可能要FQ或者设置https协议,具体google下了。
    编译sass时提示配置环境变量,但是环境变量已经配置了,运行以下命令可解决问题。
    gem update --system

    编译sass文件报 invalid charset GBK, 在环境变量配置 : rubyopt="-Ku"

    demo下载地址:http://pan.baidu.com/s/1nBGLU

    参考: http://beiyuu.com/grunt-in-action/

  • 相关阅读:
    35个Java代码优化的细节,你知道几个?
    Java如何优雅地实现接口数据校验
    Java中方法的重载详解(含系统配套视频)
    七大经典、常用排序算法的原理、Java 实现以及算法分析
    Java静态方法和实例方法
    Java静态变量和实例变量
    “反转链表”相关的题目
    【C++】将十进制数转换为十六进制数
    第四章:动态规划I
    【C++】数组中的第k个最小元素
  • 原文地址:https://www.cnblogs.com/pengjv/p/3392097.html
Copyright © 2011-2022 走看看