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等. ...
随机推荐
- Android开发学习之路-3DTouch效果模仿
3D Touch是什么效果的大家应该都知道了.什么?不知道,那也没办法呀,我也没有iPhone 6s演示给你看的. 本篇博客要做的效果图: 来个低质量动图: 这个动图效果不是很好,实际上模糊效果应该是 ...
- Atitit 常用二维码对比(QR、PDF417、DM、汉信码 Aztec code maxicode
Atitit 常用二维码对比(QR.PDF417.DM.汉信码 Aztec code maxicode DM码则更"小",可在仅仅25mm²的面积上编码30个数字.但也就是因为太小 ...
- Android-启动另一个app
直接上代码: // 通过包名获取要跳转的app,创建intent对象 Intent intent = getPackageManager().getLaunchIntentForPackage(&qu ...
- redis成长之路——(七)
扩展性封装 虽说现在StackExchange.Redis免费,万一到时候和servicestack.redis一样要收费呢,所以先留一口,后续的可以再处理 实例代码点击这里查看 redis成长之路- ...
- SQL Server 多实例下的复制
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建步骤(Procedure) 注意事项(Attention) 二.背景(Contexts) ...
- 【Win 10 应用开发】Web授权示例:获取新浪微博的授权码
在使用类似微博的开放API的时候,会涉及到授权的问题,就拿微博来说,当用户在你的应用中需要调用微博API来处理一些事情时,你首先要让用户登录微博,得到用户授权后,才能调用微博API. 授权通常通过一个 ...
- Git(最基本使用远程仓库:github)-V1.0
所有操作的根目录是:D:/zqzGit文件夹,这个目录也是git仓库 git bash清屏 clear 1.安装(略) 2.安装后记得配置: $ git config --global user ...
- ASP.NET Core 阶段性总结
自从年前用 ASP.NET 5 磕磕绊绊重写了一个项目后 (2015.12),就没怎么关注 ASP.NET 5 相关内容了,为啥?因为实际应用问题太多,而且不是正式版本,变化实在太快,可能你今天了解的 ...
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- 读书笔记--SQL必知必会06--用通配符进行过滤
6.1 LIKE操作符 通配符(wildcard),用来匹配某些值的的特殊字符. 在搜索子句中必须通过LIKE操作符使用通配符. 通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符 ...