前端自动化构建工具Grunt
一、了解Gurnt(http://www.open-open.com/lib/view/open1433898272036.html)
Grunt 是一个基于任务的JavaScript工程命令行构建工具。
Grunt和Grunt插件,是通过npm安装并管理的,npm是Node.js的包管理器。
了解Grunt前,首先要准备两件事:
1、了解npm(Node Package Manager):npm是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。
2、安装node:进入nodejs官网(https://nodejs.org/),单击INSTALL下载node安装包,默认安装。安装完成后,进入对应目录,会发现nodejs文件夹下面有npm,直接用npm安装相环境既可。
二、安装Grunt
参考Grunt官网http://www.gruntjs.net/
安装Grunt:npm install -g grunt-cli
注意,安装grunt-cli并不等于安装了Grunt!Grunt CLI的任务很简单:调用与Gruntfile在同一目录中 Grunt。这样带来的好处是,允许你在同一个系统上同时安装多个版本的Grunt。
三、简单实用Grunt
一个新的Grunt项目,必须在根目录下要有两个文件:package.json 和 Gruntfile.js
package.json: 此文件被npm用于存储项目的元数据,以便将此项目发布为npm模块。你可以在此文件中列出项目依赖的grunt和Grunt插件,放置于devDependencies配置段内。
Gruntfile: 此文件被命名为 Gruntfile.js 或 Gruntfile.coffee,用来配置或定义任务(task)并加载Grunt插件的。
1. npm init命令会创建一个基本的package.json文件。或者手动创建,如下:
{
"name": "my-project-name",
"description":"test grunt ...",
"version": "0.1.0"
}
2. 安装Grunt和Grunt插件(https://github.com/gruntjs)
向已经存在的package.json 文件中添加Grunt和grunt插件的最简单方式是通过:
npm install <module> --save-dev。此命令不光安装了<module>,还会自动将其添加到devDependencies 配置段中。
3. grunt --help 命令将列出所有可用的任务
四、简单项目流程示例
清空编译工作区 -> copy源文件到编译工作区 -> 合并文件 -> 压缩文件 -> 加时间戳
clean -> copy -> concat -> min -> md5
1. grunt-contrib-clean:Clear files and folders.
2. grunt-contrib-copy:Copy files and folders.
3. grunt-contrib-concat:Concatenate files.
4. grunt-contrib-cssmin:Compress CSS files.
grunt-contrib-uglify:Minify files with UglifyJS.
grunt-contrib-htmlmin:Minify HTML.
5. grunt-filerev:Static asset revisioning through file content hash
第一步:创建package.json
{
"name":"test_grunt",
"description":"test grunt ...",
"version":"0.0.1"
}
第二步:安装对应插件(加上--save-dev,会在package.json中加上devDependencies依赖)
npm install grunt-contrib-clean --save-dev
npm install grunt-contrib-copy --save-dev
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-cssmin --save-dev
npm install grunt-contrib-uglify --save-dev
第三步:创建Gruntfile.js,添加要使用插件配置
'use strict';
module.exports = function(grunt) {
// 构建的初始化配置
grunt.initConfig({
//配置具体任务
}); // 载入要使用的插件
grunt.loadNpmTasks('grunt-contrib-clean'); // 注册刚配置好的任务
grunt.registerTask('default', ['clean']);
}
五、地址
nodejs官网地址:https://nodejs.org/
grunt中文官网地址:http://www.gruntjs.net/
grunt官网插件地址:https://github.com/gruntjs
六、源码
// package.json
{
"name": "test_grunt",
"description": "test grunt ...",
"version": "0.0.1",
"devDependencies": {
"grunt": "^0.4.5",
"grunt-contrib-clean": "^0.6.0",
"grunt-contrib-concat": "^0.5.1",
"grunt-contrib-copy": "^0.8.0",
"grunt-contrib-cssmin": "^0.12.3",
"grunt-contrib-uglify": "^0.9.1"
}
}
//Gruntfile.js
'use strict';
module.exports = function(grunt) {
// 构建的初始化配置
grunt.initConfig({
/* 配置具体任务 */
pkg: grunt.file.readJSON('package.json'),
dirs: {
src: 'path',
dest: 'dest/<%= pkg.name %>/<%= pkg.version %>',
},
// clean任务(删除dest/test_grunt/0.0.1 目录下非min的文件)
clean: {
js: ["<%= dirs.dest %>/*.js", "!<%= dirs.dest %>/*.min.js"],
css: ["<%= dirs.dest %>/*.css", "!<%= dirs.dest %>/*.min.css"]
},
// copy任务(拷贝path目录下的文件到dest目录)
copy: {
main: {
files: [
// includes files within path
{expand: true, src: ['path/*'], dest: '<%= dirs.dest %>/', filter: 'isFile'},
]
}
},
// concat任务(将dest目录下的a.js和b.js合并为built.js)
concat: {
options: {
separator: '\n',
},
concatCSS: {
src: ['<%= dirs.dest %>/a.css', '<%= dirs.dest %>/path/b.css'],
dest: '<%= dirs.dest %>/built.css',
},
concatJS: {
src: ['<%= dirs.dest %>/a.js', '<%= dirs.dest %>/b.js'],
dest: '<%= dirs.dest %>/built.js',
}
},
// cssmin任务(压缩css)
cssmin: {
target: {
files: [{
expand: true,
cwd: '<%= dirs.dest %>',
src: ['*.css', '!*.min.css'],
dest: '<%= dirs.dest %>',
ext: '.min.css'
}]
}
},
// uglify任务(压缩js)
uglify: {
options: {
mangle: {
except: ['jQuery', 'Backbone']
}
},
my_target: {
files: {
'<%= dirs.dest %>/bulit.min.js': ['<%= dirs.dest %>/*.js']
}
}
}
}); // 载入要使用的插件
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify'); // 注册刚配置好的任务
grunt.registerTask('cls', ['clean']);
grunt.registerTask('cpy', ['copy']);
grunt.registerTask('con', ['concat']);
grunt.registerTask('cmpCSS', ['cssmin']);
grunt.registerTask('cmpJS', ['uglify']); grunt.registerTask('default', ['copy','concat','cssmin','uglify','clean']);
}
PS:
1. 自己配置的任务名称,不能和插件名称一样,否则会造成无限循环
2. 插件名称,除最外层外,中间层名称可自定义
前端自动化构建工具Grunt的更多相关文章
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- 前端自动化构建工具gulp的使用总结
前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...
- 前端自动化构建工具——gulp
gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...
- JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- 前端自动化构建工具 Gulp 使用
一个月没写博客了,今天有时间,就写个gulp的入门使用吧.. 简介:gulp是一个前端自动化构建工具,可以实现代码的检查.压缩.合并……等等,gulp是基于Node.js的自动任务运行器 一.安装No ...
- gulp前端自动化构建工具新手入门篇
很久没有更新博文了. 经过了一次年前吐血的赶项目,终于在年后回血了.趁着有空,新学到了一个前端自动化构建工具-gulp. 现在我们通过这3个问题来学习一下: 1.什么是gulp? 2.为什么要用gul ...
- 前端自动化构建工具-yoman浅谈
如今随着前端技术的飞速发展,前端项目也变得越来越复杂. 快速的搭建一个集成多种工具和框架的复杂前端项目也越来越成为一种需求. 当然如果你要自己从0开始完全自己diy,绝对可以,只不过需要耗费一些不少的 ...
- 前端自动化构建工具--Gulp&&Webpack
前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...
- 前端项目构建工具---Grunt
什么是Grunt? grunt是javascript项目构建工具,在grunt流行之前,前端项目的构建打包大多数使用ant.(ant具体使用 可以google),但ant对于前端而言,存在不友好,执行 ...
随机推荐
- javascript jquery console调试方法说明
控制台(Console)是Firebug的第一个面板,也是最重要的面板,主要作用是显示网页加载过程中产生各类信息. 一.显示信息的命令 Firebug内置一个console对象,提供5种方法,用来显示 ...
- js 封装一个均速动画函数
//动画函数---任意一个元素移动到指定的目标位置 //element为元素 target为位置 function carToon(element, target) { //设置一个定时器让他循环去增 ...
- kibana安装汉化包
kibana安装汉化包其实很简单!但要找到汉化包可能就很麻烦了.我这里提供了6.2的版本的汉化包!至于能不能在其他版本用,我就没试过了.但6.2的kibana本人亲测.没问题!!!! 下载——解压.这 ...
- SSM整合dubbo 进行分页查询
1.先书写Mapper和sql语句 public interface ActEntityMapper { int deleteByPrimaryKey(String actId); int inser ...
- 权限管理系统源码分析(ASP.NET MVC 4.0 + easyui + EF6.0 + MYSQL/MSSQLSERVER +微软企业库5.0+日志绶存)
系统采用最先进技术开发: (ASP.NET MVC 4.0 + easyui + EF6.0 + MYSQL/MSSQLSERVER +微软企业库5.0+日志绶存) 大家可以加我QQ讨论 309159 ...
- HDU - 2256 矩阵快速幂 带根号的递推
题意:求$ [(\sqrt{2}+\sqrt{3})^{2n}] mod 1024 $ 分析: 把指数的2带入 原式等于 $ [(5+2\sqrt{6})^n] $ 有一个重要的结论是n次运算后其结果 ...
- java单元测试之Mock静态方法
1 public final class AmountUtil { public static String CustomFormatWith2Digits(int amount) { return ...
- 尺取法 javascript算法
给定长度为n的数列整数a0,a1……an-1 以及整数S.求出总和不小于S的连续子序列的长度的最小值.如果解不存在,则输出0. 输入 n=10 S=15 a=[5,1,3,5,10,7,4,9,2,8 ...
- python练习六十九:urllib爬取练习
爬取图片,将链接中的图片取出来,并统计一共下载了多少图片 代码: def fetch_pictures(url): headers = {'User-Agent':'Mozilla/5.0 (Wind ...
- .net: 泛型List<T> 轉換成 DataTable類型
public static DataTable ListToDataTable<T>(List<T> entitys) { //检查实体集合不能为空 ) { return ne ...