包括了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真实项目用例的更多相关文章

  1. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  2. 实战项目-用例评审-问题总结-Dotest-董浩

    实战项目-用例评审-问题总结 内部班项目用例评审,总结的问题:供大家参考!提升用例最好的方式,可以互相执行下(评审),就会明白自己的差距或者需要避免的点在哪里.(前提是会) 1)覆盖率 原型中提到的一 ...

  3. Java算法之递归打破及在真实项目中的使用实例

    开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...

  4. Eclipse的maven构建一个web项目,以构建SpringMVC项目为例

    http://www.cnblogs.com/javaTest/archive/2012/04/28/2589574.html springmvc demo实例教程源代码下载:http://zuida ...

  5. gulp在项目中的基本使用

    在项目中用gulp做项目的代码的管理,用起来很方便.主要用到了下面一些功能 关于js的处理,包括合并.压缩.加hash. 关于css的处理,编辑scss,合并css,加hash,自动加入前缀 本地开发 ...

  6. OkGo3.0 --真实项目使用和二次封装(转)

    转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480  11.OkGo3.0真实项目使用和二次封装: ====  11.OkG ...

  7. 用java发邮件之一 (直接源于真实项目) 【原】

    真实项目应用的java发送邮件,应该还待进一步完善. 依赖 mail-1.4.jar jar包下载地址: http://mvnrepository.com/artifact/javax.mail/ma ...

  8. 从后端到前端之Vue(四)小试牛刀——真实项目的应用(树、tab、数据列表和分页)

    学以致用嘛,学了这么多,在真实项目里面怎么应用呢?带着问题去学习才是最快的学习方式.还是以前的那个项目,前后端分离,现在把前端换成vue的,暂时采用脚本化的方式,然后在尝试工程化的方式. 现在先实现功 ...

  9. 使用低版本的VS打开高版本项目的解决方案(以VS2008打开VS2010开发的项目为例)

    使用低版本的VS打开高版本项目的解决方案,这里以VS2008打开VS2010开发的项目为例. 右键项目的sln文件以记事本的方式打开: 将对应的前两列版本各降到对应的版本,这边的11.00改为10.0 ...

随机推荐

  1. UIButton快速点击,只执行最后一次

    button快速点击时,会导致,同一动作执行多次,常用解决办法: 第一种方法:推荐 //取消执行 [[self class] cancelPreviousPerformRequestsWithTarg ...

  2. Gson将字符串转换成JsonObject和JsonArray

    以下均利用Gson来处理: 1.将bean转换成Json字符串: public static String beanToJSONString(Object bean) { return new Gso ...

  3. Entity Framework 6连接Postgresql、SQLite、LocalDB的注意事项和配置文件

    Postgresql Postgresql支持Code First的方式自动生成表,不过默认的模式是dbo而不是public,而且还可以自动生成自增主键. <?xml version=" ...

  4. Android 解析聊天表情的笔记

    应用需要用到聊天功能,考虑到开始需求不大,暂时先用第三方的. 一研究发现界面风格有点不符合整体的风格,加上需要一些自己的特定的需求和界面显示,于是就决定调用第三方数据接口,界面自己写.功能只需要文字, ...

  5. c# Entity DbArithmeticExpression arguments must have a numeric common type

    在Entity Lambda表达式中计算DateTime类型的时候 不能直接用DateTime类型进行相减计算差值 需要使用DbFunctions提供的一些方法. 例如: DbFunctions.Di ...

  6. Python实战项目网络爬虫 之 爬取小说吧小说正文

    本次实战项目适合,有一定Python语法知识的小白学员.本人也是根据一些网上的资料,自己摸索编写的内容.有不明白的童鞋,欢迎提问. 目的:爬取百度小说吧中的原创小说<猎奇师>部分小说内容 ...

  7. CentOS 7 安装 配置 MySQL

    第一部分:CentOS 7安装MySQL 5.7 1.下载YUM库 shell > wget http://dev.mysql.com/get/mysql57-community-release ...

  8. Android File存储

    原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_File_store.html 一 概念 Android系统中提供了一种文件读写的方 ...

  9. JS数组经典冒泡排序

    将8,4,3,1,4,6,等数字按照从小到大的顺序依次输出: var arr=new Array(); arr.push(8); arr.push(4); arr.push(3); arr.push( ...

  10. js控制文本框只能输入中文、英文、数字与指定特殊符号.

    先在'' 里输入 onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g,'')里的 X换成你想输入的代码就可以了, 中文u4 ...