什么是grunt?

   Grunt是一个JavaScript任务运行器,用于自动执行频繁任务(如压缩,编译,单元测试)的工具。它使用命令行界面来运行在文件中定义的自定义任务(这个文件称为Gruntfile)。 Grunt由Ben Alman创建,用Node.js编写。它通过npm分发。现在,Grunt生态系统中有超过5,000个插件可用。

如何使用grunt?

基本概念

1.CLI(Command-line interface):Grunt的命令行界面(CLI)可以通过npm全局安装。执行grunt命令将加载并运行当前目录中本地安装的Grunt版本。因此,我们可以在不同的文件夹中维护不同版本的Grunt,并根据需要执行相对应的版本。安装grunt-cli只是将grunt命令放在系统路径中,允许它从任何目录运行。安装grunt-cli不会安装Grunt任务运行器! Grunt CLI的工作很简单:运行已经安装在Gruntfile文件目录内的Grunt版本。所以允许多个版本的Grunt同时安装在同一台机器上。

2.package.json文件:包含项目的元数据,包括名称,版本,描述,作者,许可证及其依赖项(项目所需的Grunt插件)。所有依赖项都列在dependencies或devDependencies部分中。

3.Gruntfile文件:一个名为“Gruntfile.js”或“Gruntfile.coffee”的有效JavaScript或CoffeeScript文件,其中包含用于配置任务,加载现有插件以及创建自定义任务的代码。

4.任务运行:任务是执行指定作业的模块。它们在Gruntfile中定义。 开发人员可以从现有的Grunt插件加载预定义的任务以及编写自定义代码,以根据需求定义自己的任务。一旦定义,只需执行grunt <taskname>即可从命令行(CLI)运行这些任务。如果Gruntfile中定义的<taskname>是'default',那么只需执行grunt即可。即不加参数是执行默认的任务。

安装cli

  安装命令很简单,全局安装(首先需要先安装npm到全局),直接输入:

npm install -g grunt-cli

  npm是包管理的工具,-g表示全局安装,如果直接使用npm install它会找当前目录下是否有package.json,然后在当前目录安装这个文件里面配置的相关依赖。如果使用npm install <module name> 会安装指定的模块。

建立一个package.json

  这边我首先先在E盘的目录下面新建一个gruntTest的测试文件夹:

  输入:

npm init

  接着会让你填写相关的信息,选择默认的,直接按enter下一步!

  可以见到生成了相关的文件:

安装grunt和相关插件

  安装相关的package的命令格式为:

npm install <module> --save-dev

  --save-dev的意思是把安装的module保存到package.json文件的依赖之中。

  首先需要安装grunt,安装后可以使用grunt命令来跑(因为已经安装了grunt-cli)当前目录下所安装的grunt版本。

npm install grunt --save-dev

  如果你想安装JSHint任务模块,运行npm install grunt-contrib-jshint --save-dev即可,可以按需求添加对应的任务模块(也叫插件)。

编写Gruntfile

  Gruntfile.js或Gruntfile.coffee文件是一个有效的JavaScript或CoffeeScript文件,它位于项目的根目录中,位于package.json文件旁边,做项目时应该与项目源码一起提交。

  Gruntfile.js一般由以下四部分组成

  1)wrapper“包装”函数

  2)项目和任务配置

  3)加载Grunt插件和任务

  4)自定义任务

  以下展示一份压缩的任务的Gruntfile.js的书写,

 module.exports = function(grunt) {

   // 项目配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: { },
build: {
src: 'js/src/vue.js',
dest: 'js/dest/vue.min.js'
}
}
}); // 加载提供'uglify'任务的插件
grunt.loadNpmTasks('grunt-contrib-uglify'); // 默认的任务
grunt.registerTask('default', ['uglify']); };

  先安装压缩的插件

npm install grunt-contrib-uglify --save-dev

  然后运行输入grunt,即可运行相关的默认任务,

  可以看出vue.js从源目录被压缩到对应的目标目录。

后面博客会继续学习grunt常用的相关插件。

我的grunt学习笔记的更多相关文章

  1. Grunt 学习笔记【2】---- 配置和创建任务

    本文主要讲Grunt任务配置. 说明:本文所有示例都基于Grunt 0.4.5版本. 一 说明 使用Grunt实现项目的打包等工程化工作,实际上是通过Grunt提供的机制和插件,配置一个个任务(例如: ...

  2. grunt学习笔记

    1. 在使用grunt前需要执行的几条命令和用途 npm uninstall -g grunt  删除掉全局grunt npm install -g grunt-cli 把grunt加入你的系统搜索路 ...

  3. grunt学习笔记1 理论知识

    你需要检查js语法错误,然后再去压缩js代码.如果这两步你都去手动操作,会耗费很多成本.Grunt就能让你省去这些手动操作的成本. “—save-dev”的意思是,在当前目录安装grunt的同时,顺便 ...

  4. Grunt学习笔记【8】---- grunt-angular-templates插件详解

    本文主要讲如何用Grunt打包AngularJS的模板HTML. 一 说明 AngularJS中使用单独HTML模板文件的地方非常多,例如:自定义指令.ng-include.templateUrl等. ...

  5. Grunt学习笔记【7】---- grunt-contrib-less插件详解

    本文主要讲如何使用Grunt实现less文件压缩. 一 说明 less是非常常用的样式框架之一,Grunt也提供了可以编译和打包less样式文件的插件:grunt-contrib-less. 实现原理 ...

  6. Grunt学习笔记【6】---- grunt-contrib-requirejs插件详解

    本文主要讲如何使用Grunt实现RequireJS文件压缩. 一 说明 ES6出来前,RequireJS是JavaScript模块化最常用的方式之一.对于使用RequireJS构建的项目,要实现打包压 ...

  7. Grunt学习笔记【5】---- expand使用方法

    本文主要讲expand使用方法. 当你希望处理大量的单个文件时,这里有一些附加的属性可以用来动态的构建一个文件列表.这些属性都可以用于 Compact 和 Files Array 文件映射格式. ex ...

  8. Grunt学习笔记【4】---- 通配符和模板

    本文主要讲通配符和模板的基本使用方法. 一 通配符 通常分别指定所有源文件路径是不切实际的,因此Grunt通过内置支持node-glob 和 minimatch 库来匹配文件名(又叫作globbing ...

  9. Grunt学习笔记【3】---- filter使用方式和实现原理详解

    本文主要讲配置任务中的filter,包括使用默认fs.Stats方法名和自定义过滤函数,以及filter的实现原理. 通过设置filter属性可以实现一些特殊处理逻辑.例如:要清理某个文件夹下的所有空 ...

随机推荐

  1. JVM——垃圾回收(GC)

    GC简单介绍 java语言执行在java虚拟机(jvm)上.为了解决有限的空间和性能的保证这个矛盾体,jvm所具备的GC能力.能够有效的清除不用的对象.使空间的利用更加合理.以下介绍该机制的原理. 推 ...

  2. AtomicLong.lazySet 是如何工作的?

    原文:http://www.quora.com/Java-programming-language/How-does-AtomicLong-lazySet-work Jackson Davis说:为一 ...

  3. [ModemManger]ModemManger的取消

    http://www.linux-databook.info/?page_id=3748 systemctl disable ModemManager.service 失能ModemManger从而取 ...

  4. 关于指针*前后const代表的意思——记住一个口诀“左内右本”

    记住一个口诀“左内右本”:const出现在*的左边,则说明指针所指向的内容是常量const出现在*的右边,则说明指针本身是常量如果*左右两边都出现const,那么说明指针本事是常量,它所指向的内容也是 ...

  5. 蛋疼的mysql_ping()以及MYSQL_OPT_RECONNECT

    From: https://www.felix021.com/blog/read.php?2102 昨天@Zind同学找到我之前的一篇blog(已经修改),里面提到了mysql_ping和MYSQL_ ...

  6. 缓存技术PK:选择Memcached还是Redis?

    缓存技术PK:选择Memcached还是Redis? memcached完全剖析----------------->高质量文章 memcached的最佳实践方案 数据缓存系统-memcached ...

  7. Microsoft.Identity的IPasswordHasher加密的默认实现与运用

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址  www.cnblogs.com/tdws 相信了解了MS Identity认证体系的一定知道UserManager的作用,他是整个体 ...

  8. react 生命周期钩子里不要写逻辑,否则不生效

    react 生命周期钩子里不要写逻辑,否则不生效,要把逻辑写在函数里,然后在钩子里调用函数,否则会出现问题.

  9. PHP文件解密服务,微擎微赞模块解密,微擎模块解密

    支持Zend/PHP5.3, Zend/PHP5.4, Zend/PHP5.5, Zend/PHP5.6解密 支持IonCube8, IonCube9, IonCube10解密 支持魔方一代,魔方二代 ...

  10. [JS] Topic - Object.create vs new

    故事背景 Ref: 你不知道的javascript之Object.create 和new区别 var Base = function () {} (1) var o1 = new Base(); (2 ...