前端项目构建之grunt学习篇

简介:

什么是Grunt

当你编写完JS或者CSS代码之后,合并,压缩,代码检查等这些细小的任务会把你搞的头晕脑涨,
这时候就是grunt出马的时候了,它会安排一系列的任务,然后让电脑规矩的执行你的命令,它是以任务为基础的.

Grunt的安装

  • window环境

    • 安装nodejs环境,可以去这里下载.
    • 安装npm包管理器,假如安装的nodejs版本较高的话,npm会自动安装的,可以用npm --version 来检查是否安装.
    • 全局安装grunt任务管理器,命令npm install -g grunt,-g 代表安装在全局.
    • 安装grunt cli,命令npm install -g grunt-cli,这是一个执行gruntfile中不同版本的grunt用的,这样可以保证在不同的grunt版本中切换.
  • *nix环境

    • 类unix环境跟window环境差不多,只是安装的时候,权限不足的话,命令之前加上sudo,比如安装grunt,命令sudo npm install -g grunt.

Grunt配置文件

grunt配置里有两大文件,一个是package.json,另一个是gruntfile.js

  • package.json 文件

    • package.json主要用来描述,当前网站运行grunt任务的名称,作者,版本,以及grunt任务依赖的nodejs模块,其实这也是nodejs模块的标准描述文件.

      • 主要有以下几个参数:
      • name: 名称
      • version: 版本
      • author: 作者
      • devDependencies: 依赖项
      • 详细的参数请参考这里
    • 这里给个例子

    {
      "name": "gruntapp",
      "version": "0.0.1",
      "author": "xuwenmin",
      "devDependencies": {
        "grunt": "~0.4.4",
        "grunt-contrib-jshint": "~0.9.2",
        "grunt-contrib-concat": "~0.4.0",
        "grunt-contrib-clean": "~0.5.0",
        "grunt-contrib-uglify": "~0.2.0",
        "grunt-contrib-watch": "~0.5.2",
        "grunt-contrib-cssmin": "~0.7.0",
        "load-grunt-tasks": "~0.2.0"
      }
    }
  • gruntfile.js 文件

    • gruntfile.js主要用来配置各个任务的参数,比如合并文件的来源和目的,压缩任务的来源和目的。

      • gruntfile主要做三件事
      • 配置参数,用grunt.initConfig方法
      • 加载任务模块, 用require('load-grunt-tasks')(grunt)方法,这个会自动的加载任务用到的模块,而不用每个模块写一句加载代码,像这样grunt.loadNpmTasks('grunt-contrib-uglify');
      • 注册一个配置任务,用grunt.registerTask方法
      • 配置参数的核心就是每个任务都需要一个target,然后每个target都会包含一个files或者option,files可以是简单风格,文件数组,文件对象.
      • 详细的配置参数说明,看这里
      • 详细的配置范例,看这里
    • 这里我放上我自己写的例子

module.exports = function(grunt){
    // 自动加载任务
    require('load-grunt-tasks')(grunt);
    grunt.initConfig({
        // css压缩配置文件,key名需要与模块名相同
        cssmin:{
            // 压缩
            minify: {
                expand: true,
                cwd: 'css/',
                src: ['*.css', '!*.min.css'],
                dest: 'css/',
                ext: '.min.css',
                filter: function(data){
                    console.log('文件:', data);
                    return true;
                }
            },
            // 合并
            combine: {
                files: {
                    'dist/css/out.min.css': ['css/*.min.css']
                }
            }
        },
        // js检查
        jshint: {
            options: {
                // 表示要严格相等
                eqeqeq: true,
                // 表示行尾不得有多余的空格
                trailing: true
            },
            // 表示检查js以及子目录下的.js文件
            files: ['js/**/*.js']
        },
        clean:{
            dist:{
                src:'dist/**/*.js' 
            }
        },
        // 合并文件
        concat:{
            foo:{
                options: {
                    separator: ';'
                },
                // 文件数组格式
                files:[
                    {
                       src:'js/*.js', dest: 'dist/js/out.js' 
                    }
                ]
                // 文件对象格式
               /* files:{
                    'dist/js/out.js': ['js/*.js']
                },*/
                // 简单格式
                /*src: ['js/*.js'],
                dest: 'dist/js/out.js'*/
            }
        },
        uglify:{
            foo: {
                src:['dist/js/out.js'],
                filter: function(v){
                    console.log('输出:', v);
                    return true;
                },
                dest:'dist/js/out.min.js'
            }
        }

    });
    // 注册一个检查js的任务
    grunt.registerTask('jscheck',['jshint']);
    // 默认为压缩css的任务
    grunt.registerTask('default', ['cssmin:minify','cssmin:combine']);
    // 自定义任务
    grunt.registerTask('demo', 'Log some stuff.', function() {
        grunt.log.write('Logging some stuff...').ok();
    });
    grunt.registerTask('buildjs',['clean:dist', 'concat:foo', 'uglify:foo']);
}

执行grunt

做完上面的准备工作之后,就拿我那个例子来说,执行命令如下

grunt buildjs

这个命令会先执行clean来清空目标文件夹,然后执行concat来合并文件,最后执行uglify来压缩文件


目录
相关文章
|
24天前
|
前端开发 JavaScript 开发工具
从前端到后端:构建现代化的全栈开发环境
在当今技术迅速发展的时代,全栈开发已成为越来越受欢迎的趋势。本文将探讨如何构建现代化的全栈开发环境,涵盖从前端到后端的各个方面,包括技术选型、开发工具、部署流程等内容,帮助开发者更高效地搭建全栈项目。
|
25天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
25天前
|
资源调度 前端开发 测试技术
前端工程化实践:从零搭建现代化项目构建流程
【4月更文挑战第6天】本文介绍了前端工程化的概念和重要性,包括模块化、自动化、规范化和CI/CD。接着,讨论了选择合适的工具链,如包管理器、构建工具和测试框架。然后,详细阐述了如何从零开始搭建一个基于React的现代化项目构建流程,涉及初始化、代码规范、测试、CSS处理、代码分割和CI/CD配置。最后,提到了持续优化与迭代的方向,如性能优化、类型检查和微前端。通过这样的实践,开发者可以提升开发效率和代码质量,为项目长远发展奠定基础。
30 0
|
26天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
移动开发 前端开发 JavaScript
从零开始学习前端开发:入门指南
本文将介绍从零开始学习前端开发的入门指南。通过学习HTML、CSS和JavaScript等基础知识,读者将了解前端开发的基本概念和工具,并学会如何构建简单的网页应用程序。无论您是初学者还是有一定经验的开发人员,本文都将帮助您打下坚实的前端开发基础。
|
11天前
|
移动开发 前端开发 数据可视化
前端HTML:构建网页的基石
前端HTML:构建网页的基石
15 0
|
4天前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
【4月更文挑战第30天】Flutter,Google的开源跨平台框架,已延伸至Web领域,让开发者能用同一代码库构建移动和Web应用。Flutter Web通过将Dart代码编译成JavaScript和WASM运行在Web上。尽管性能可能不及原生Web应用,但适合交互性强、UI复杂的应用。开发者应关注性能优化、兼容性测试,并利用Flutter的声明式UI、热重载等优势。随着其发展,Flutter Web为跨平台开发带来更多潜力。
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
|
4天前
|
开发框架 前端开发 JavaScript
【Flutter前端技术开发专栏】Flutter中的动态UI构建与数据驱动视图
【4月更文挑战第30天】Flutter是一款高效跨平台移动开发框架,以其热重载、高性能渲染和丰富组件库著称,简化了动态UI和数据驱动视图的实现。本文深入讨论了动态UI构建原理,包括基于Widget树模型的UI更新和状态管理,如使用StatefulWidget和数据流库(如Provider、Redux)。此外,文中还介绍了实现技巧,如使用ListView等可滚动组件、StreamBuilder进行数据流驱动的UI更新,以及应用响应式布局以适应不同设备。Flutter为开发者提供了构建高效动态界面的强大工具。
【Flutter前端技术开发专栏】Flutter中的动态UI构建与数据驱动视图
|
5天前
|
存储 移动开发 JavaScript
学习javascript,前端知识精讲,助力你轻松掌握
学习javascript,前端知识精讲,助力你轻松掌握
|
5天前
|
前端开发 JavaScript 开发工具
前端技术栈:构建现代Web应用的基石与实践
前端技术栈:构建现代Web应用的基石与实践
14 3