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等. ...
随机推荐
- C++的性能C#的产能?! - .Net Native 系列四:性能测试方法(PerfView)
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- Entity Framework 6 Recipes 2nd Edition(13-9)译 -> 避免Include
问题 你想不用Include()方法,立即加载一下相关的集合,并想通过EF的CodeFirst方式实现. 解决方案 假设你有一个如Figure 13-14所示的模型: Figure 13-14. A ...
- .NET 基础 一步步 一幕幕[数组、集合、异常捕获]
数组.集合.异常捕获 数组: 一次性存储多个相同类型的变量. 一维数组: 语法: 数组类型[] 数组名=new 数组类型[数组长度]; 声明数组的语法: A.数据类型 [] 数组名称= new 数据类 ...
- redhat7 修改hostname
修改linux redhat的 hostname 其实有好一些陷阱.. 通常 我们修改 /etc/sysconfig/network 的 HOSTNAME 变量即可 但是它不会立即生效, 需要执行下面 ...
- PHPUnit笔记
PHPUnit是一个面向PHP程序员的测试框架,这是一个xUnit的体系结构的单元测试框架. 复杂的项目,通过单元测试能够快速排查bug,有效减少bug的产生.简单的项目,使用php自带的var_du ...
- QunInfo群数据库的还原与优化
一. 背景 这个数据库的数据文件mdf大概有8.5G左右,当还原数据库之后感觉可以做很多性能方面上的调优,合并数据后mdf数据文件大概有6.2G左右,行压缩后mdf数据文件大概有4.8G左右,页压缩后 ...
- CSS实现图片缩放特效
今天是感恩节,祝大家感恩节快乐哦!最近天冷了,大家注意保暖哟.下面一起看看小颖写的demo吧. html代码: <!DOCTYPE html> <html> <head& ...
- Java学习之LinkedHashMap学习总结
前言: 在学习LRU算法的时候,看到LruCache源码实现是基于LinkedHashMap,今天学习一下LinkedHashMap的好处以及如何实现lru缓存机制的. 需求背景: LRU这个算法就是 ...
- 初步认识Node 之Node为何物
很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了. Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...
- 介介介是一个ORM
介个是一个ORM,介个ORM基于Dapper扩展. 为什么需要一个ORM呢? 支持简单的LINQ查询 但是不能连表查询,why?why?why?为什么不能连接查询 ^.^ ok.但是就是不支持.哈哈哈 ...