Gulp真实项目用例
包括了less预编译,css压缩,html文件include引入,js混淆压缩,本地开发热刷新服务器,html压缩,版本号添加
github地址:
gulpfile.js
var gulp = require('gulp'), //基础库
imagemin = require('gulp-imagemin'), //图片压缩
less = require('gulp-less'), // less
minifycss = require('gulp-minify-css'), //css压缩
fileinclude = require('gulp-file-include'), // 文件包含
//jshint = require('gulp-jshint'), //js检查
uglify = require('gulp-uglify'), //js压缩
rename = require('gulp-rename'), //重命名
//concat = require('gulp-concat'), //合并文件
//clean = require('gulp-clean'), //清空文件夹
notify = require('gulp-notify'), // 信息提示
plumber = require('gulp-plumber'),
connect = require('gulp-connect'), //本地开发web服务器,包括实时刷新
rev = require('gulp-rev'),
revCollector = require('gulp-rev-collector'),
revReplace = require('gulp-rev-replace'),
minifyHTML = require('gulp-minify-html');
var devDir = 'dist';
/** less编译 **/
gulp.task('less', function () {
gulp.src('./src/less/mspei.less')
.pipe(less())
//.pipe(rename({ suffix: '.min' }))
//.pipe(minifycss())
.pipe(gulp.dest('./'+devDir+'/css/'));
});
/** js **/
gulp.task('js', function () {
gulp.src(['./src/js/**/*'])
.pipe(gulp.dest('./'+devDir+'/js/'));
});
/** 通用文件包含 **/
gulp.task('fileinclude', function() {
gulp.src(['./src/views/**/*.html', '!./src/views/include/**.html'])
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
}))
.pipe(gulp.dest('./'+devDir+'/'));
});
/** 图片处理 **/
gulp.task('images', function () {
gulp.src(['./src/images/**/*'])
.pipe(gulp.dest('./'+devDir+'/images/'));
});
/** 字体图标 **/
gulp.task('fonts', function () {
gulp.src(['./src/fonts/**/*'])
.pipe(gulp.dest('./'+devDir+'/fonts/'));
});
/** 使用connect启动一个Web服务器 **/
gulp.task('connect', function () {
connect.server({
root: './'+devDir+'/',
livereload: true
});
});
/** 刷新页面 **/
gulp.task('reload', function () {
gulp.src('./'+devDir+'/**/*.html')
.pipe(connect.reload());
});
/** 监测文件变动,设置自动执行的任务 **/
gulp.task('watch', function () {
gulp.watch('./src/less/**/*.less', ['less', 'reload']); // 当所有less文件发生改变时,调用less任务
gulp.watch('./src/js/**/*.js', ['js', 'reload']); // 当所有js文件发生改变时,调用js任务
gulp.watch('./src/views/**/*.html', ['fileinclude', 'reload']); // 当所有模板文件变化时,重新生成生成页面到根目录
gulp.watch('./src/images/**/*', ['images']); // 监听images
});
/** 开发时,运行 'gulp dev' **/
gulp.task('dev', ['connect', 'less', 'js', 'fileinclude', 'images', 'fonts', 'reload', 'watch']);
/*****************************************************************
* dist版本,压缩版
****************************************************************/
/** less编译 **/
gulp.task('lessDist', function () {
gulp.src('./src/less/mspei.less')
.pipe(less())
//.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(rev())
.pipe(gulp.dest('./dist/css/'))
.pipe(rev.manifest())
.pipe(gulp.dest('./src/rev/css'));
});
/** js **/
gulp.task('jsDist', function () {
gulp.src(['./src/js/**/*', '!./src/js/**/*.js'])
.pipe(gulp.dest('./dist/js'));
gulp.src(['./src/js/**/*.js'])
.pipe(uglify({
mangle: {except: ['require', 'exports', 'module', '$']}
}))
.pipe(rev())
.pipe(gulp.dest('./dist/js/'))
.pipe(rev.manifest())
.pipe(gulp.dest('./src/rev/js'));
});
/** 通用文件包含 **/
gulp.task('fileincludeDist', function() {
gulp.src(['./src/views/**/*.html', '!./src/views/include/*.html'])
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
}))
.pipe(gulp.dest('./dist/'));
});
/** 图片处理 **/
gulp.task('imagesDist', function () {
gulp.src(['./src/images/**/*'])
.pipe(gulp.dest('./dist/images/'));
});
/** 字体图标 **/
gulp.task('fontsDist', function () {
gulp.src(['./src/fonts/**/*'])
.pipe(gulp.dest('./dist/fonts/'));
});
gulp.task('commonRev', function () {
return gulp.src(['src/rev/**/*.json', 'dist/**/*.html'])
.pipe( revCollector({
replaceReved: true,
dirReplacements: {
'css': 'css',
'js': 'js',
//'cdn/': function(manifest_value) {
// return '//cdn' + (Math.floor(Math.random() * 9) + 1) + '.' + 'exsample.dot' + '/img/' + manifest_value;
//}
}
}) )
.pipe( minifyHTML({
empty:true,
spare:true
}) )
.pipe( gulp.dest('dist') );
});
//处理seajs脚本的模块引用
gulp.task("seaRev", function() {
var jsManifest = gulp.src('./src/rev/js/*.json');
return gulp.src(["src/js/config.js"], {
base: "src/js"
})
.pipe(revReplace({
manifest: jsManifest
}))
.pipe(rev())
.pipe(gulp.dest("dist/js"))
.pipe(rev.manifest("rev-manifest-seajs.json", {
merge: true
}))
.pipe(gulp.dest("src/rev/js"));
});
/** 发布时,运行 'gulp dist' **/
/** 需版本号,再运行 'gulp rev' **/
gulp.task('dist', ['lessDist', 'jsDist', 'fileincludeDist', 'imagesDist', 'fontsDist']);
gulp.task('rev', ['commonRev', 'seaRev']);
package.json
{
"name": "mspei_front",
"version": "1.0.0",
"description": "",
"main": "index.js",
"devDependencies": {
"gulp": "^3.9.1",
"gulp-asset-rev": "^0.0.15",
"gulp-connect": "^4.1.0",
"gulp-file-include": "^0.13.7",
"gulp-imagemin": "^3.0.1",
"gulp-less": "^3.1.0",
"gulp-livereload": "^3.8.1",
"gulp-minify-css": "^1.2.4",
"gulp-notify": "^2.2.0",
"gulp-plumber": "^1.1.0",
"gulp-rename": "^1.2.2",
"gulp-rev": "^7.1.2",
"gulp-rev-collector": "^1.0.5",
"gulp-uglify": "^2.0.0",
"gulp-rev-replace": "^0.4.3",
"gulp-minify-html": "^1.0.6"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "nuanfeng",
"license": "ISC"
}
Gulp真实项目用例的更多相关文章
- iOS -数据持久化方式-以真实项目讲解
前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...
- 实战项目-用例评审-问题总结-Dotest-董浩
实战项目-用例评审-问题总结 内部班项目用例评审,总结的问题:供大家参考!提升用例最好的方式,可以互相执行下(评审),就会明白自己的差距或者需要避免的点在哪里.(前提是会) 1)覆盖率 原型中提到的一 ...
- Java算法之递归打破及在真实项目中的使用实例
开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...
- Eclipse的maven构建一个web项目,以构建SpringMVC项目为例
http://www.cnblogs.com/javaTest/archive/2012/04/28/2589574.html springmvc demo实例教程源代码下载:http://zuida ...
- gulp在项目中的基本使用
在项目中用gulp做项目的代码的管理,用起来很方便.主要用到了下面一些功能 关于js的处理,包括合并.压缩.加hash. 关于css的处理,编辑scss,合并css,加hash,自动加入前缀 本地开发 ...
- OkGo3.0 --真实项目使用和二次封装(转)
转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480 11.OkGo3.0真实项目使用和二次封装: ==== 11.OkG ...
- 用java发邮件之一 (直接源于真实项目) 【原】
真实项目应用的java发送邮件,应该还待进一步完善. 依赖 mail-1.4.jar jar包下载地址: http://mvnrepository.com/artifact/javax.mail/ma ...
- 从后端到前端之Vue(四)小试牛刀——真实项目的应用(树、tab、数据列表和分页)
学以致用嘛,学了这么多,在真实项目里面怎么应用呢?带着问题去学习才是最快的学习方式.还是以前的那个项目,前后端分离,现在把前端换成vue的,暂时采用脚本化的方式,然后在尝试工程化的方式. 现在先实现功 ...
- 使用低版本的VS打开高版本项目的解决方案(以VS2008打开VS2010开发的项目为例)
使用低版本的VS打开高版本项目的解决方案,这里以VS2008打开VS2010开发的项目为例. 右键项目的sln文件以记事本的方式打开: 将对应的前两列版本各降到对应的版本,这边的11.00改为10.0 ...
随机推荐
- Jquery揭秘系列:实现$.fn.extend 和$.extend函数
前面我们扩展了bind方法和ready函数,这次我要讲一下$.fn.extend 和$.extend函数. 其他的不多说,直接切入主题吧! 先来看看这两个函数的区别: $.fn.extend是为查询的 ...
- Android开发之应用程序的安装
这里介绍的是用XUtils下载apk文件,然后进行安装. 首先用HttpUtils下载文件(记得获取SD卡的读写权限和联网的权限): /** * 下载Apk */ private void downL ...
- Java处理 文件复制
try { InputStream in = new FileInputStream(new File(oldPath)); OutputStream out = new FileOutputStre ...
- CSS实例练习
蓝色导航为图片,用background-image实现. 排版用到ul,li标签,下划线运用border-bottom中的dashed,右边文字用到CSS浮动float. 实例: 代码: <!D ...
- JSPatch 使用
1.JSPatch 准备 地址:https://github.com/bang590/JSPatch 框架:libz.1.tbd , JavaScriptCore.framework 2.cocosp ...
- Zabbix协议分析
概述 Zabbix使用一种自定义的基于TCP的协议与客户端进行通信 Zabbix <- TCP -> Zabbix agent 协议内容 <HEADER> - bytes) & ...
- sql 批量插入数据到Sqlserver中 效率较高的方法
使用SqlBulk #region 方式二 static void InsertTwo() { Console.WriteLine("使用Bulk插入的实现方式"); Stopwa ...
- 借助JavaScript中的Dom属性改变Html中Table边框的颜色
借助JavaScript中的Dom属性改变Html中Table边框的颜色 -------------------- <html> <head> <title>我是页 ...
- jquery1.7.2的源码分析(三)$.Deferred
例子的详细讲解 Filter Resolve var filterResolve = function() { var defer = $.Deferred(), filtered = defer.t ...
- JS监听键盘的组合按键
Mark 一下: $(document).keydown(function (e) { console.log(e); var keyCode = e.keyCode || e.which || e. ...