zoukankan      html  css  js  c++  java
  • Grunt 构建网站初探

    一直在钻研关于 Umbraco 的东西, 打算换换脑子,玩点别的东西先。

    Grunt 是之前两个项目中,尝试开始使用的东西,因为不是专职的前端攻城狮,所以对于这类东西还是知之甚少,不过经过这两次的使用,真心觉得这种东西非常的便利,选择了对的工具,很多工作都可是事半功倍的。

    具体 Grunt 是什么,请自行前往官网了解。中文版网站,近期不知为何不能访问了,www.gruntjs.net,看起来不是被墙的原因,似乎是服务除了什么故障。

    How to started,根据官网的指南一步步做下来即可。之前一直在用 mac,给同事 Windows 安装时确实也遇到了一点问题,在此仅给出 Windows平台安装的的一点建议。

    1、不必使用类似于 n 或者 nvm 一类的 node 版本管理工具进行安装,这在某些集团企业中,设置权限是非常麻烦的事情;

    2、直接下载 nodejs 官网的 for windows 安装包下载 node,安装好之后,运行:

    npm install -g grunt grunt-cli grunt-init
    

      *以上分别是安装 grunt、grunt 命令行工具,init 是一个 grunt 插件,可以初始化基本的 grunt 文件结构。

    3、安装好后,一定记得设置 windows 环境变量,将 Grunt 安装的目录,配置到系统 PATH 路径中去,否则当你关闭 dos 窗口再开启,则会提示找不到 Grunt 命令,而你再次安装又会提示报错。

    Grunt 结构中,有两个最为重要的结构性描述文件:package.json、Gruntfile.js,前者实际也是 node 项目的标配,后者是 Grunt 独有的构建文件。

    package.json 文件:

    {
      "name": "grunt_templete",
      "version": "1.0.0",
      "description": "基础的Grunt项目模板",
      "license": "MIT",
      "repository": {
        "type": "git",
        "url": "https://git.oschina.net/xxxx"
      },
      "devDependencies": {
        "grunt": "^1.0.1",
        "grunt-contrib-clean": "^1.1.0",
        "grunt-contrib-concat": "^1.0.1",
        "grunt-contrib-copy": "^1.0.0",
        "grunt-contrib-cssmin": "^2.2.0",
        "grunt-contrib-htmlmin": "^2.3.0",
        "grunt-contrib-jshint": "^1.1.0",
        "grunt-contrib-less": "^1.4.1",
        "grunt-contrib-uglify": "^3.0.1",
        "grunt-contrib-watch": "^1.0.0"
      }
    }
    

      *其中,关于依赖包的版本号,是需要权衡考虑的,如果项目时间较长,可能会不定期的更新 package.json,导致团队间共享要小心该文件的管理,还是改为固定版本较好;如果是短期项目,则可是使用"^"来自动更新至最新版本。

    Gruntfile.js 文件:

    module.exports = function(grunt) {
        grunt.file.defaultEncoding = 'utf-8';
        /**project configuration*/
        grunt.initConfig({
            pkg : grunt.file.readJSON('package.json'),
    
            clean: {
                contents: ['dest/*'],
                subfolders: ['dest/*/'],
                css: ['dest/assets/css/*'],
                js: ['dest/assets/js/*'],
                cleantemp:['dest/assets/css/temp']
            },
            less: {
                default: {
                    files: [{
                        expand: true,
                        cwd: 'src/less',
                        src: ['*.less'],
                        dest: 'dest/assets/css/temp',
                        ext: '.css'
                    }]
                }
            },
            cssmin: {
                default:{
                    files: [{
                        expand: true,
                        cwd: 'dest/assets/css/temp',
                        src: ['*.css'],
                        dest: 'dest/assets/css/',
                        ext: '.min.css'
                    }]
                }
            },
            jshint:{
                options:{
                    expr:true, 
                    lastsemic : true,
                    scripturl:true, 
                    ignores : ['dealer-*.js']
                },
                beforeuglify:['Gruntfile.js', 'src/js/*.js'],
                afteruglify:['dest/assets/js/*.js', '!dest/assets/js/dealer.min.js']
            },
            uglify:{
                buildall: {
                    files: [{
                        expand:true,
                        cwd: 'src/js',
                        src:'*.js',//所有js文件
                        dest: 'dest/assets/js',//输出到此目录下
                        ext: '.min.js'
                    }]
                },
            },
            copy: {
                main: {
                    expand: true,
                    nonull: true,
                    cwd: 'src/html',
                    src: '**',
                    dest: 'dest/',
                    options: {
                    }
                },
                resources: {
                    expand: true,
                    nonull: true,
                    cwd: 'src/images',
                    src: '**',
                    dest: 'dest/assets/images',
                }
            },
            watch: {
                css: {
                    files: ['src/less/*.less'],
                    tasks: ['less', 'cssmin', 'clean:cleantemp'],
                    options: {
                        interrupt: true,
                        spawn: false
                    }
                },
                js: {
                    files: ['src/js/*.js'],
                    tasks: ['jshint:beforeuglify', 'uglify', 'jshint:afteruglify'],
                    options: {
                        interrupt: true,
                        spawn: false
                    }
                },
                resources: {
                    files: ['src/html/*', 'src/html/**/*', 'src/images/*', 'src/images/**/*'],
                    tasks: ['copy'],
                    options: {
                        interrupt: true,
                        spawn: false,
                        event: ['all'],
                    }
                }
            }
        });
    
        /**load tasks package*/
        grunt.loadNpmTasks('grunt-contrib-clean');
        grunt.loadNpmTasks('grunt-contrib-less');
        grunt.loadNpmTasks('grunt-contrib-cssmin');
        grunt.loadNpmTasks('grunt-contrib-jshint');/**语法检查**/
        grunt.loadNpmTasks('grunt-contrib-uglify');/**js 压缩**/
        grunt.loadNpmTasks('grunt-contrib-copy');
        grunt.loadNpmTasks('grunt-contrib-watch');
        
        grunt.registerTask('default', ['clean', 'less', 'cssmin', 'jshint:beforeuglify', 'uglify', 'jshint:afteruglify', 'clean:cleantemp', 'copy', 'watch']);
    };

    *这是我目前比较常用的基本包,包含了文件清理、less 编译、css 压缩、 js语法检查(分压缩前和压缩后)、压缩、html 以及其他资源文件的复制、文件变动的检测。每次运行 Grunt 命令之后,即可专注于前端的工作,不必再去考虑 js 语法、css 格式等问题,复制文件路径等。如果语法错误,命令行中会有醒目的提示;如果无误,修改后即可在浏览器中直接查看。

    so easy!!!

    所有的组件及使用方法,均可在官方插件库(https://gruntjs.com/plugins)找到,这里也不再赘述谁都在讲的内容了。

    对于工具的态度,我一直是点到即止,不求甚解,使用时先让它动起来,遇到问题,需要研究再认真钻研。

  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/bashenandi/p/grunt-project.html
Copyright © 2011-2022 走看看