博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yeoman的好基友:Grunt
阅读量:6550 次
发布时间:2019-06-24

本文共 2580 字,大约阅读时间需要 8 分钟。

grunt介绍

前端不能承受之痛

1、这是我们的生活

  • 文件压缩:YUI Compressor、Google Closure
  • 文件合并:fiddler + qzmin
  • 文件校验:jshint
  • 雪碧图:cssGaga
  • sass编译:sass/compass
  • 文件打包:require + r.js / seajs + wpm
  • 。。。

2、究竟痛在哪里

下载难 /(版本)管理难

YUI Compressor:

Google Closure:

jshint:

其他:。。。

环境依赖、平台依赖

YUI Compressor:JDK

fiddler/qzmin:win平台

sass/compass:ruby

配置使用难:

系统参数设置

工具自己的命令、参数

3、谁能拯救我们

grunt

image

问题一:grunt是什么

  • 官方定义:The JavaScript Task Runner
  • 民间版本:基于任务的JavaScript项目构建工具
  • 关键词:JavaScript、Task、Runner

问题二:grunt是什么

曾经grunt是: 命令行工具+构建工具+脚手架工具+预定义任务

  • 命令行工具(grunt-cli)
  • 构建工具(grunt)
  • 脚手架工具(grunt-init)
  • 预定义任务(concat、uglify、jshint等)

grunt-cli:

The Grunt command line interface.

Note: The job of the grunt command is to load and run the version of Grunt you have installed locally to your project, irrespective of its version.

grunt:

The JavaScript Task Runner

grunt-init:

Grunt-init is a scaffolding tool used to automate project creation.

问题三:为什么使用grunt

哪些优势

  1. 环境/平台依赖小(node环境、grunt-cli)

  2. 便捷的下载/版本管理(npm)

  3. 插件丰富,极易扩展(目前300++)

  4. 活跃的社区

demo演示:运行任务

步骤一:安装package

npm install

步骤二:运行任务

文件合并

grunt dist

js文件校验

grunt jshint

grunt项目的要素

Gruntfile.js:必要

Grunt任务的主入口文件,主要作用在于任务的定义与配置

package.json

项目组件依赖的描述文件,非必要

grunt我们需知道什么

  • 基于nodejs(npm)
  • 核心是任务、任务配置(配置即任务)
  • 大部分是文件操作 (基于blob、minmath的文件匹配)
  • 一系列API:file、config、log、task、option等
  • 自定义插件

grunt任务配置

方式一:grunt.initConfig

grunt.initConfig({    clean: {        dev: [ 'dev/' ],    },    jshint: {        all: ['dist/js/**/*.js']    }});

方式二:grunt.config 接口

grunt.config.set('jshint', {    all: ['dist/js/**/*.js']});grunt.task.run('jshint');

grunt Task类型

根据任务类型:

  • 普通任务
  • 插件任务

根据任务位置:

  • 内部任务:Gruntfile.js里定义
  • 外部任务:Gruntfile.js之外定义

grunt Task类型:根据任务类型

普通任务

任务定义

grunt.task.registerTask('hello', '一个无聊的demo', function() {    console.log( '大家好,我是grunt任务!');    });

运行任务

grunt hello

插件任务

任务内部

grunt.registerMultiTask('inline', "同样是很无聊的demo", function() {    var files = this.filesSrc;  // 用户    files.forEach(function(filepath){        console.log( '输出文件路径:'+ filepath  );    };});

任务配置

grunt.initConfig({    'inline': {        test: {            src: [$config.distPath+'**/*.html']        }    }});

运行任务

grunt inline

grunt Task类型:根据任务位置

内部任务

最常见,Gruntfile.js里定义,可满足绝大部分项目的需求

grunt.task.registerTask('hello', '一个无聊的demo', function() {    console.log( '大家好,我是grunt任务!');    });

外部任务

定义方式跟内部任务基本没区别,在Grungfile.js之外定义,用到的时候显式加载即可

加载插件:

grunt.loadNpmTasks('grunt-cdn');

加载自定义任务

grunt.task.loadTasks('proj-task/core');

grunt-inline:一个自定义的grunt插件

grunt-inline作用:将html页面里的声明了__inline标记的<script><link><img>等变成内联资源,即:

  • script:内联脚本
  • link:内联样式
  • img:base64

例子:下面这段script标签,声明了__inline,构建阶段会被行内脚本替换

构建前

构建后

grunt-inline:插件创建实战

参见 第二部分《插件编写及发布》

进入实战

@TODO

转载地址:http://exuco.baihongyu.com/

你可能感兴趣的文章
关于javaBean中boolean类型变量的set和get注入后传到前端JS中的问题
查看>>
黄聪:mysql主从配置(清晰的思路)
查看>>
黄聪:Discuz!的SEO优化策略二:如何去掉页脚多余的信息
查看>>
黄聪:Dsicuz x2.5、X3、X3.2如何去掉域名后面的/forum.php
查看>>
黄聪:如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式...
查看>>
IP multicast IP多播
查看>>
Prestashop--配置到阿里云
查看>>
【三招给系统“添加/删除程序”提速】
查看>>
基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用
查看>>
UWP消息通知
查看>>
反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java...
查看>>
电子学习产品缘何备受青睐?
查看>>
名词解释
查看>>
webmagic 下载页面
查看>>
探索c#之一致性Hash详解
查看>>
jQuery操作DOM
查看>>
【转】IE6、IE7下绝对定位position:absolute和margin的冲突bug解决方法
查看>>
2017 校赛 问题 E: 神奇的序列
查看>>
leetcode 46-Permutations and 47-Permutations II
查看>>
每日一小练——二项式系数加法解
查看>>