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-笔记的更多相关文章

  1. 学习笔记--Grunt、安装、图文详解

    学习笔记--Git安装.图文详解 安装Git成功后,现在安装Gruntjs,官网:http://gruntjs.com/ 一.安装node 参考node.js 安装.图文详解 (最新的node会自动安 ...

  2. 前端自动化学习笔记(一)——Yeoman,bower,Grunt的安装

    最近看视频学习了前端自动化的一些知识,确实让我大开眼界.感觉前端越来越神器了.同时跟着视频自己也尝试运用了一些工具去构建前端项目,但是中间遇见了很多坑,磕磕绊绊的才实现了一点功能,所以打算记录一下学习 ...

  3. windows下安装node环境,以及grunt试水笔记

    grunt,当下前端界知名度最高的工作流处理工具. 在一线的互联网公司,它早已经被用烂了,而我真正接触,是在去年年底... 期间还因为内心太杂分心玩乐而荒废学途,以致到最近才重拾学业,在这里BS一下自 ...

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

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

  5. Sass和compass 安装 和配合grunt实时显示 [Sass和compass学习笔记]

    demo 下载http://vdisk.weibo.com/s/DOlfkrAWjkF/1401192855 为什么要学习Sass和compass ?提高站独立和代码产品化的绝密武器,尤其是程序化cs ...

  6. grunt学习笔记

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

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

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

  8. 我的grunt学习笔记

    什么是grunt?  Grunt是一个JavaScript任务运行器,用于自动执行频繁任务(如压缩,编译,单元测试)的工具.它使用命令行界面来运行在文件中定义的自定义任务(这个文件称为Gruntfil ...

  9. Grunt快速使用笔记

    本篇文章由:http://xinpure.com/grunt-quick-note/ http://www.gruntjs.net/getting-started Grunt中文网 安装 Grunt ...

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

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

随机推荐

  1. 简易nginx TCP反向代理设置

    nginx从1.9.0开始支持TCP反向代理,之前只支持HTTP.这是我的系统示意图: 为何需要? 为什么需要反向代理?主要是: 负载均衡 方便管控 比如我现在要更新后端服务器,如果不用负载均衡的话, ...

  2. HTML5网页录音和压缩,边猜边做..(附源码)

    宣传一下自己的qq群: (暗号:C#交流) 欢迎喜欢C#,热爱C#,正在学习C#,准备学习C#的朋友来这里互相学习交流,共同进步 群刚建,人不多,但是都是真正热爱C#的 我也是热爱C#的 希望大家可以 ...

  3. Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结

    Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...

  4. zookeeper集群搭建

    1.由于是第一次搭建zk的集群,过程中遇到些问题,给自己也给遇到问题的人提供一种可能解决问题的方法. 第一步:下载zk的最新版,我下的是3.4.9,在zk的官网,下载后解压到/usr/local ta ...

  5. 【兼容写法】HttpServerUtility.Execute 在等待异步操作完成时被阻止。关键词:MVC,分部视图,异步

    异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html MVC6之前的版本,对分部视图的异步支持不是很好 问题: 视图里面有分布视图:@{ ...

  6. 表值函数与JS中split()的联系

    在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...

  7. C#中的Session

    一: 网站开发中,为了保存用户信息我们就会用到session. Session具有以下特点:(1)Session中的数据保存在服务器端:(2)Session中可以保存任意类型的数据:(2)Sessio ...

  8. WPF自定义RoutedEvent事件代码段

    今天在写东西的时候,发现常用的代码段里没有RoutedEvent的,因此,写了一个代码段,方便以后使用,顺便记录一下,如何做代码段. 1.在项目中新建一个XML文件,将扩展名修改为snippet. 2 ...

  9. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

  10. TextView使用大全

    最近打算写一个系列的android初级开发教程,预计40篇以上的文章,结合我实际工作中的经验,写一些工作中经常用到的技术,让初学者可以少走弯路,写一个系列的话,大家学习起来也有头有尾. 今天就从我们每 ...