grunt 安装使用(一)
grunt 依赖nodejs,所有在使用前确保你安装了nodejs,然后开始执行grunt命令。
.安装node
安装完成后在命令行,执行命令:
node -v

出现版本信息,说明安装完成.NPM是随同nodejs一起安装的包管理工具,能解决nodejs代码部署上的很多问题:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
 - 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
 - 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
 
.grunt命令行(CLI)安装在全局环境下
grunt是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:
① 压缩文件
② 合并文件
③ 简单语法检查
对于已安装低版本,要更新最新版本需要先卸载,进行安装:
npm uninstall -g grunt
为了方便在全局安装grunt命令接口(CLI)
> npm install -g grunt-cli
该命令植入到你的系统中,允许从任意目录运行Grunt
.创建目录
在本地创建项目目录:grunt_test1

创建完成,添加package.json文件 ,也可以手动生成一个文件(npm init)

命令行执行:
cnpm install grunt --save-dev
在当前目录下安装grunt依赖。 tips:淘宝npm镜像安装:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
执行后就可以使用cnpm 代替npm

cnpm install grunt --save-dev 执行之后,就会看到
node_modules模块加载 及 package.json 依赖模块会存在
.插件安装
这里的插件有官方及第三方提供插件,区分方式 grunt-contrib 是官方标注
Contrib-jshint——javascript语法错误检查;
- Contrib-htmlmin ——压缩html代码
 - Contrib-cssmin—— 压缩css代码
 - Contrib-imagemin——压缩图片
 Contrib-watch——实时监控文件变化、调用相应的任务重新执行;
Contrib-clean——清空文件、文件夹;
Contrib-uglify——压缩javascript代码
Contrib-copy——复制文件、文件夹
Contrib-concat——合并多个文件的代码到一个文件中
karma——前端自动化测试工具
先看 JS 批量压缩, 安装插件Contrib-uglify
cnpm install grunt-contrib-uglify --save-dev

会看到该插件依赖。 同时在该目录下创建文件
Gruntfile.js
这个文件尤其关键,他一般干两件事情:
① 读取package信息
② 插件加载、注册任务,运行任务(grunt对外的接口全部写在这里面)
Gruntfile一般由四个部分组成
① 包装函数
这个包装函数没什么东西,意思就是我们所有的代码必须放到这个函数里面
module.exports = function (grunt) {
//你的代码
}
这个不用知道为什么,直接将代码放入即可
② 项目/任务配置
我们在Gruntfile一般第一个用到的就是initConfig方法配置依赖信息
pkg: grunt.file.readJSON('package.json')
这里的 grunt.file.readJSON就会将我们的配置文件读出,并且转换为json对象
然后我们在后面的地方就可以采用pkg.XXX的方式访问其中的数据了
以上描述--抄袭的,我比较懒-直接拿过用
grunt.loadNpmTasks('xxx'); 加载模块
grunt.registerTask('default', ['xxx']);默认执行任务
看看实例:
Gruntfile.js
module.exports = function (grunt) {
  // 项目配置
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify:{
      js:{
        files:[{
          expand: true,
          cwd: 'src/js',
          src: '**/*.js',
          dest: 'dist/js'
        }]
      }
    }
  });
  grunt.loadNpmTasks('grunt-contrib-uglify');
  // 默认任务
  grunt.registerTask('default', ['uglify']);
}
- expand:如果设为true,就表示下面文件名的占位符(即*号)都要扩展成具体的文件名。
 - cwd:需要处理的文件(input)所在的目录。
 - src:表示需要处理的文件。如果采用数组形式,数组的每一项就是一个文件名,可以使用通配符。
 - dest:表示处理后的文件名或所在目录。
 - ext:表示处理后的文件后缀名。
 
grunt.initConfig:定义各种模块的参数,每一个成员项对应一个同名模块。
grunt.loadNpmTasks:加载完成任务所需的模块。
grunt.registerTask:定义具体的任务。第一个参数为任务名,第二个参数是一个数组, 表示该任务需要依次使用的模块。
项目目录创建src文件夹,里边有js文件夹, js文件夹下有两个js文件。


执行命令: grunt

看到由原来9.72kb ---压缩到--->5.8kb,同时生产一个压缩目录:

css,html,img压缩原理都是一样的。针对每个文件一 一 压缩。
'use strict';
module.exports = function (grunt) {
// 项目配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify:{
js:{
files:[{
expand: true,
cwd: 'src/js',
src: '**/*.js',
dest: 'dist/js'
}]
}
}, cssmin:{
// 去除html注释
options: {
collapseWhitespace: true,
conservativeCollapse: true,
collapseBooleanAttributes: true,
removeCommentsFromCDATA: true
},
css:{
files:[{
expand: true,
cwd: 'src/css',
src: '**/*.css',
dest: 'dist/css'
}]
}
},
htmlmin:{
options: {
removeComments: true,
removeCommentsFromCDATA: true,
collapseWhitespace: true,
collapseBooleanAttributes: true
},
html:{
files:[{
expand: true,
cwd: 'src/html',
src: ['**/*.html'],
dest: 'dist/html'
}]
}
},
imagemin: {
dist:{
options: {
optimizationLevel: 3 // 定义 PNG 图片优化水平
}, files:[{
expand: true,
cwd: 'src/img/',
src: ['**/*.{png,jpg,jpeg}'],
dest:'dist/img/'
}]
}
} });
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-htmlmin');
grunt.loadNpmTasks('grunt-contrib-imagemin'); // 默认任务
grunt.registerTask('default', ['uglify','cssmin','htmlmin', 'imagemin']);
// grunt.registerTask('default', ['imagemin']); // grunt.registerTask('minall', ['uglify:buildall']);
}
创建一个任务起个别名:
// common task.
grunt.registerTask('build-file', 'build file', function() {
grunt.task.run('htmlmin:html');
}); // 默认被执行的任务列表。
grunt.registerTask('default', ['build-file']); // 与下边效果一样
};
grunt 安装使用(一)的更多相关文章
- Grunt安装配置教程:前端自动化工作流
		
Grunt这货是啥? Grunt 是一个基于任务的 JavaScript 项目命令行构建工具. 最近很火的前端自动化小工具,基于任务的命令行构建工具 http://gruntjs.com Grunt能 ...
 - grunt安装
		
随着node的流行,各种后台的技术应用到前端,依赖注入.自动化测试.构建等等. 本篇就介绍下如何使用Grunt进行构建. grunt安装 由于grunt依赖于nodejs,因此需要先安装nodejs. ...
 - javascript grunt安装和使用
		
grunt是javascript世界的构建工具. 为何要用构建工具? 一句话:自动化.对于需要反复重复的任务,例如压缩(minification).编译.单元测试.linting等.自动化工具可以减轻 ...
 - Grunt安装中遇到的问题汇总
		
Grunt安装中遇到的问题汇总 1.如果是windows下的dos中安装Grunt,必须以管理员身份登录(第一个坑) 登录方法是: 方法一:开始>所有程序>附件>命令提示符上右键&g ...
 - grunt安装和使用教程
		
grunt的安装 npm intall -g grunt-cli 新建文件夹grunt,在本地文件中添加package.json和Gruntfile.js文件,其中package.json文件的配置如 ...
 - grunt安装与配置
		
安装 CLI npm install -g grunt-cli//全局安装 npm init //初始化package.json npm init 命令会创建一个基本的package.json文件 ...
 - grunt安装与运行
		
用grunt前,需要先安装nodejs.因为grunt依赖于nodejs.nodejs的安装可以参照我的博客里头的nodejs的下载,安装与测试. 第一步:安装grunt-CLI 注意你的电脑要联 ...
 - Grunt 安装与配置环境
		
当时学习 Grunt 的时候,真是很头疼.分了两个时间段,学习了两次才硬啃下来,之后才能用在项目中.主要原因我认为是学习资料和文档上面写的太高端了.这类的文档或者资料有个显著特点,上来先简单介绍一下这 ...
 - grunt安装、配置、在webstrom中使用
		
1.全局范围安装 Grunt命令行(CLI) npm install -g grunt-cli Grunt CLI的任务很简单:调用与Gruntfile在同一目录中 Grunt.这样带来的好处是,允许 ...
 - grunt安装_
		
grunt_构建WEBJS程序框架,. package.json是文件配置 ====〉〉〉〉 在Gruntfile.js里面会引用到. //目录下直接放node的东西 ,比如: node_module ...
 
随机推荐
- Ubuntu16.04版安装VMwareTools的步骤和没法挂载目录问题的解决
			
vmtool安装流程 1.点击vmware 里面的虚拟机——>安装vmware tool 2.然后(等待一会)弹出一个界面把里面的 VMwareTools-9.6.1-1378637.tar.g ...
 - 《Head First Servlets & JSP》-2-概述
			
什么是容器 Servlet没有main()方法,他们受控于另一个Java应用,这个java应用称为容器(Container). Web服务器应用(如Apache)得到一个指向Servlet的请求(如何 ...
 - C语言结构体--位域
			
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可.比如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.正是基于这种考虑,C语言又提供了一种叫做位域 ...
 - Java50道经典习题-程序40 字符串排序
			
题目:根据字符串内字符的ASCII码值对字符串数组进行排序.分析:字符串用ASCII码比较大小,规则是:1.比较首字母的ASCII码大小2.若是前面的字母相同,则比较之后的字母的ASCII码值3.若是 ...
 - js 代码收集
			
//获取image src路径 $(".userImg").click(function(){ var imgsrc = $(this).attr("src") ...
 - gRPC官方文档(gRPC基础:C++)
			
文章来自gRPC 官方文档中文版 本教程提供了C++程序员如何使用gRPC的指南. 通过学习教程中例子,你可以学会如何: 在一个 .proto 文件内定义服务. 用 protocol buffer 编 ...
 - [haut] 1281: 邪能炸弹  dp
			
题目描述 正在入侵艾泽拉斯的古尔丹偶然间得到了一颗邪能炸弹,经过研究,他发现这是一颗威力极其巨大且难以控制的炸弹.但是精通邪能的古尔丹突然有了一个大胆的想法,他对炸弹进行了一些小小的改造.这使得炸弹需 ...
 - New Distinct Substrings(后缀数组)
			
New Distinct Substrings(后缀数组) 给定一个字符串,求不相同的子串的个数.\(n<=50005\). 显然,任何一个子串一定是后缀上的前缀.先(按套路)把后缀排好序,对于 ...
 - Html再学
			
1. Html是网页的载体.内容就是网页制作者放在页面上想要用户浏览的信息,可以包括文字.图片.视频等. 2. CSS样式是展现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片.边 ...
 - Python和FTP
			
1.HTTP主要用于基于Web的文件下载以及访问Web服务,一般客户端无须登录就可以访问服务器上的文件和服务.大部分HTTP文件传输请求都用于获取网页(即将网页文件下载到本地). 2.FTP主要用于匿 ...