包括了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. .NET Core中ADO.NET SqlClient的使用与常见问题

    一.简介 在很多要求性能的项目中,我们都要使用传统的ADO.NET的方式来完成我们日常的工作:目前有一些网友问有关于.NET Core操作SQL Server的问题在本文中解答一下. 本文旨在指出,在 ...

  2. Tower是个不错的项目管理开放平台

    简单,易用,轻量级,挺多大项目都在用. 目前公司的项目也在使用,但是从高层到底下,随意惯了,最终没有用起来. 感觉适合年轻激情的创业公司团队来使用. 附上地址:https://tower.im/

  3. 【Mutual Training for Wannafly Union #1 】

    A.Phillip and Trains CodeForces 586D 题意:过隧道,每次人可以先向前一格,然后向上或向下或不动,然后车都向左2格.问能否到达隧道终点. 题解:dp,一开始s所在列如 ...

  4. Android基础总结(六)

    创建第二个Activity(掌握) 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <ac ...

  5. 学记:为spring boot写一个自动配置

    spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...

  6. 添加webservice调用日志

    之前想用spring的AOP给webservice添加切面的,但是使用around切面后,居然调用端得不到webservice的返回结果,而且报文的详细情况也不得而知,很是尴尬,所以偷了个懒.但是该做 ...

  7. BZOJ 1227: [SDOI2009]虔诚的墓主人

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1078  Solved: 510[Submit][Stat ...

  8. IDEA中maven搭建Spring+SpringMVC+mybatis项目

    一.介绍 使用IDEA搭建maven web项目,整合框架Spring+SpringMVC+mybatis 项目结构图:

  9. Swift中类与结构的初始化

    前言:通过学习与研究swift3.0的官方文档关于初始化这部分可以总结为一句话:类与结构是确保一个类型的实例可以使用之前,其所有存储属性都得到了正确的赋值. 一,结构的初始化1 struct Firs ...

  10. Oracle创建自增ID

    先创建序列sequence create sequence S_User minvalue 1 nomaxvalue  -- 或 maxvalue 999 start with 1 increment ...