grunt-笔记
package.json:
{
"name": "grunt-uglify",
"version": "1.0.0",
"description": "lichir",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "lichir",
"license": "ISC",
"devDependencies": {
"connect-livereload": "^0.6.0",
"grunt": "^1.0.1",
"grunt-contrib-clean": "^1.0.0",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-connect": "^1.0.2",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-cssmin": "^1.0.2",
"grunt-contrib-imagemin": "^1.0.1",
"grunt-contrib-jshint": "^1.0.0",
"grunt-contrib-uglify": "^2.0.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-open": "^0.2.3",
"grunt-rev": "^0.1.0",
"grunt-usemin": "^3.1.1",
"load-grunt-tasks": "^3.5.2",
"serve-index": "^1.8.0",
"serve-static": "^1.11.1"
}
}
module.exports = function(grunt){
"use strict";
require('load-grunt-tasks')(grunt);
// grunt.loadNpmTasks('grunt-contrib-uglify');
// grunt.loadNpmTasks('grunt-contrib-jshint');
// grunt.loadNpmTasks('grunt-contrib-watch');
// grunt.loadNpmTasks('grunt-contrib-copy');
// grunt.loadNpmTasks('grunt-contrib-concat');
var serveStatic = require('serve-static');
var serveIndex = require('serve-index');
var lrPort = 35729;
// 使用connect-livereload模块,生成一个与LiveReload脚本
// <script src="http://127.0.0.1:35729/livereload.js?snipver=1" type="text/javascript"></script>
var lrSnippet = require('connect-livereload')({ port: lrPort });
var lrMiddleware = function(connect, options, middlwares) {
return [
lrSnippet,
// 静态文件服务器的路径
serveStatic(options.base[0]),
// 启用目录浏览(相当于IIS中的目录浏览)
serveIndex(options.base[0])
];
};
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
/* js代码压缩 */
uglify: {
options: {
banner: '/*! 顶部信息 <%= grunt.template.today("yyyy-mm-dd hh:mm:ss") %> */\n',
footer:'\n/*! 最后修改于: <%= grunt.template.today("yyyy-mm-dd hh:mm:ss") %> */',
preserveComments: false, //不删除注释,还可以为 false(删除全部注释)
mangle: false //不混淆变量名
},
//压缩 init.js, util.js, labels.js
build1: {
files: {
'assets/compile/js/init_util_labels.min.js': ['assets/js/init.js','assets/js/util.js','assets/config/labels.js']
}
},
//压缩 fastclick.js, zepto.js, template.js
build2: {
files: {
'assets/compile/js/fastclick_zepto_template.min.js': ['assets/lib/fastclick.js','assets/lib/zepto.min.js','assets/lib/template.js']
}
},
//压缩 all.js
build3: {
files: {
'assets/compile/js/all.min.js': ['assets/compile/js/fastclick_zepto_template.min.js','assets/compile/js/init_util_labels.min.js']
}
},
//按原文件结构压缩js文件夹内所有JS文件
buildall: {
files: [{
expand:true, // 设置为true,表示要支持cwd等更多配置
cwd:'assets/lib', // 所有的源文件路径,都是相对于js
src:'**/*.js', // 所有js文件
dest:'output/lib', // 输出到此目录下
ext: '.min.js' // 生成文件的名字
}]
},
//任务5:合并concat任务生成的合并文件
buildconcat: {
files: {
'output/<%= pkg.name %>.min.js': ['<%= concat.build1.dest %>']
}
}
},
/*css代码压缩*/
cssmin: {
build1: {
files: [{
expand:true,
cwd: 'assets/css',
src:'common.css',
dest: 'assets/compile/css',
ext: '.min.css'
}]
}
},
/*图片压缩*/
imagemin:{
options: {
optimizationLevel: 3 //定义 PNG 图片优化水平
},
build1:{
files: [{
expand: true,
cwd: 'assets/images',
src: ['**/*.{png,jpg,gif}'],
dest:'out/img/'
}]
}
},
/*删除代码*/
clean:{
build1: {
src: [
'assets/compile/css/common.min.css',
'assets/compile/js/init_util_labels.min.js',
'assets/compile/js/fastclick_zepto_template.min.js',
'assets/compile/js/all.min.js',
]
}
},
/*代码合并*/
concat: {
options: {
// 定义一个用于插入合并输出文件之间的字符
separator: ';'
},
build1: {
src: ['assets/js/init.js','assets/js/util.js','assets/config/labels.js'],
dest:'assets/compile/js/main.js'
}
},
/*语法检测*/
jshint: {
build1: ['assets/js/util.js'],
options: {
browser: true,
devel: true
}
},
/*文件监听*/
watch: {
build1: {
files: ['assets/js/init.js','assets/js/util.js','assets/config/labels.js'],
tasks: ['uglify:build1']
},
build2: {
files: ['htmls-pad/payment.js'],
tasks: ['jshint:build1']
},
/*配合connect 的 task 使用,实现及时更新*/
client: {
options: {livereload: lrPort},
files: ['htmls-pad/*.html','htmls-pad/*.js','assets/js/*.js']
}
},
/*
文件更新后自动浏览器自动刷新,相关插件:
1: grunt-contrib-watch
2: grunt-contrib-connect
3: connect-livereload
4: serve-static
5: serve-index
*/
connect: {
options: {
port: 8400,
hostname: '127.0.0.1',//localhost
base: '.'
},
livereload: {
options: {
// 通过LiveReload脚本,让页面重新加载。
middleware: lrMiddleware
}
}
},
/*自动打开:grunt-open*/
open :{
dev : {
path:'http://127.0.0.1:8400',
app: 'Chrome'
}
},
/*
文件名前加入md5字符串 : grunt-rev ,
替换模板里的链接为更改后的 : grunt-usemin
*/
rev: {
options: {
algorithm: 'md5',
length: 8
},
assets: {
files: [{
expand:true,
cwd: 'assets/compile/css',
src:'*.css'
}]
}
},
useminPrepare: {
html: ['app/tpl/**/*.html'],
options:{
dest: 'build/tpl'
}
},
usemin: {
html: ['build/tpl/**/*.html'],
options: {
assetsDirs: ['build/js']
}
},
/*拷贝文件*/
copy: {
html:{
files: [{
expand:true,
cwd: 'app/',
src: ['tpl/**/*.html'],
dest: 'build/'
}]
},
}
});
// 默认任务
grunt.registerTask('default', [
'clean',
'uglify:build1',
'uglify:build2',
'uglify:build3',
'cssmin:build1'
]);
grunt.registerTask('cb1', ['concat:build1']);
grunt.registerTask('jb1', ['jshint:build1']);
grunt.registerTask('wb1', ['watch:build1']);
/*浏览器自动刷新*/
grunt.registerTask('live', ['connect','open:dev','watch:client']);
grunt.registerTask('a', ['useminPrepare','usemin']);
}
// * 匹配任意多个字符,除了 /
// ? 匹配除了 / 之外的单个字符
// ** 匹配任意多个字符,包括 /
// {} 匹配用逗号分割的 or 列表
// ! 用在模式的开通,表示取反
//
//
//
//
// 安装项目初始目录
// npm install -g generator-webapp
// yo webapp grunt-yo-webapp
// sudo npm install -g generator-webapp@v0.6.2
grunt-笔记的更多相关文章
- 学习笔记--Grunt、安装、图文详解
学习笔记--Git安装.图文详解 安装Git成功后,现在安装Gruntjs,官网:http://gruntjs.com/ 一.安装node 参考node.js 安装.图文详解 (最新的node会自动安 ...
- 前端自动化学习笔记(一)——Yeoman,bower,Grunt的安装
最近看视频学习了前端自动化的一些知识,确实让我大开眼界.感觉前端越来越神器了.同时跟着视频自己也尝试运用了一些工具去构建前端项目,但是中间遇见了很多坑,磕磕绊绊的才实现了一点功能,所以打算记录一下学习 ...
- windows下安装node环境,以及grunt试水笔记
grunt,当下前端界知名度最高的工作流处理工具. 在一线的互联网公司,它早已经被用烂了,而我真正接触,是在去年年底... 期间还因为内心太杂分心玩乐而荒废学途,以致到最近才重拾学业,在这里BS一下自 ...
- Grunt 学习笔记【2】---- 配置和创建任务
本文主要讲Grunt任务配置. 说明:本文所有示例都基于Grunt 0.4.5版本. 一 说明 使用Grunt实现项目的打包等工程化工作,实际上是通过Grunt提供的机制和插件,配置一个个任务(例如: ...
- Sass和compass 安装 和配合grunt实时显示 [Sass和compass学习笔记]
demo 下载http://vdisk.weibo.com/s/DOlfkrAWjkF/1401192855 为什么要学习Sass和compass ?提高站独立和代码产品化的绝密武器,尤其是程序化cs ...
- grunt学习笔记
1. 在使用grunt前需要执行的几条命令和用途 npm uninstall -g grunt 删除掉全局grunt npm install -g grunt-cli 把grunt加入你的系统搜索路 ...
- grunt学习笔记1 理论知识
你需要检查js语法错误,然后再去压缩js代码.如果这两步你都去手动操作,会耗费很多成本.Grunt就能让你省去这些手动操作的成本. “—save-dev”的意思是,在当前目录安装grunt的同时,顺便 ...
- 我的grunt学习笔记
什么是grunt? Grunt是一个JavaScript任务运行器,用于自动执行频繁任务(如压缩,编译,单元测试)的工具.它使用命令行界面来运行在文件中定义的自定义任务(这个文件称为Gruntfil ...
- Grunt快速使用笔记
本篇文章由:http://xinpure.com/grunt-quick-note/ http://www.gruntjs.net/getting-started Grunt中文网 安装 Grunt ...
- Grunt学习笔记【8】---- grunt-angular-templates插件详解
本文主要讲如何用Grunt打包AngularJS的模板HTML. 一 说明 AngularJS中使用单独HTML模板文件的地方非常多,例如:自定义指令.ng-include.templateUrl等. ...
随机推荐
- stm32GPIO的速度是什么意思
[引]: I/O口输出模式下,有3种输出速度可选(2MHz.10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分 ...
- C# 开发windows服务的一些心得
最近在做一个windows服务的项目,发现并解决了一些问题,拿出来和大家分享一下,以下windows服务简称“服务” 文章会在适合时间更新,因为朋友们在不断提出新的意见或思路,感谢-.- 1.服务如何 ...
- TCP同步与异步,长连接与短连接【转载】
原文地址:TCP同步与异步,长连接与短连接作者:1984346023 [转载说明:http://zjj1211.blog.51cto.com/1812544/373896 这是今天看到的一篇讲到T ...
- bootstrap表格
Bootstrap 实例 - 边框表格 < 建立日期 2015-5-27 录入人员 test1 处理人员 test2 问题报障人 部门/城市公司 联系电话 问题类型 处理状态 ...
- C#制作、打包、签名、发布Activex全过程
一.前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信.调用,单单依靠HTML是无法实现了,因此必须借用Activex来实现.由于本人主要擅长C#,自然本文给出了用C#实现的范例 ...
- JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)
1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一 ...
- VS2010编写WebService与在IIS的发布<之简单讲解>
工具VS2010,window环境win7 一:Webservice的创建与方法查看调用 1.新建空web应用程序项目 2.新建web服务 3.自动生成 4.直接跑起来,可以看到有2个方法 5.点击H ...
- javascript的垃圾收集机制
× 目录 [1]原理 [2]标记清除 [3]引用计数[4]性能问题[5]内存管理 前面的话 javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存.在编写javascri ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- (原)用pixi.js 实现 方块阵点击后原地自转效果
源码 各位,请教一个问题,我这个还有BUG,我是想实现,点击一下可以 停止转动,然后再点一下重新转动.而不是一直加速,有没有什么好办法? PS:问题已经解决,谢谢评论的大神@Antineutrino ...