var gulp = require('gulp');
//工具
var autoprefixer = require('gulp-autoprefixer');
var include = require('gulp-file-include');
var gulpSequence = require('gulp-sequence');
var clean = require('gulp-clean');
//转码
var sass = require('gulp-sass');
var babel = require('gulp-babel');
var css_base64 = require('gulp-css-base64');
//压缩优化
var minifyHtml = require('gulp-htmlmin');
var minifyImage = require('gulp-imagemin');
var minifyJs = require('gulp-jsmin');
var minifyCss = require('gulp-clean-css');
//版本控制
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');
var delOriginal = require('gulp-rev-delete-original');
//localhost
var browserSync = require('browser-sync').create();
var reload = browserSync.reload;
//路径定义
var srcPath = {
root: 'src',
html: ['src/**/*.html', '!src/include/**/*.html'],
images: 'src/images/*',
css: 'src/css/*.scss',
js: 'src/js/*.js',
library: 'src/library/*.js'
},
distPath = {
root: 'dist',
html: 'dist',
images: 'dist/images',
css: 'dist/css',
js: 'dist/js',
library: 'dist/library',
manifest: 'dist/**/*.json',
};
//插件库处理
gulp.task('library', ()=> {
return gulp.src(srcPath.library)
.pipe(minifyJs())
.pipe(gulp.dest(distPath.library));
})
//生产环境
//css处理
gulp.task('css-dist', () => {
return gulp.src([distPath.manifest, distPath.css + '/*.css'])
.pipe(revCollector())
.pipe(rev())
.pipe(delOriginal())
.pipe(gulp.dest( distPath.css))
.pipe(rev.manifest())
.pipe(gulp.dest( distPath.css))
})
gulp.task('css-compile', () => {
return gulp.src(srcPath.css)
.pipe(css_base64({
maxWeightResource: 8 * 1024,
}))
.pipe(sass())
.pipe(autoprefixer({
browsers: ['last 2 versions'],
cascade: false,
}))
.pipe(minifyCss())
.pipe(gulp.dest(distPath.css))
})
//js处理
gulp.task('js-dist', ()=>{
return gulp.src(srcPath.js)
.pipe(babel({
presets: ['env'],
}))
.pipe(minifyJs())
.pipe(rev())
.pipe(gulp.dest(distPath.js))
.pipe(rev.manifest())
.pipe(gulp.dest(distPath.js))
})
//image 处理
gulp.task('images-dist', ()=>{
return gulp.src(srcPath.images)
.pipe(minifyImage())
.pipe(rev())
.pipe(gulp.dest(distPath.images))
.pipe(rev.manifest())
.pipe(gulp.dest(distPath.images))
})
//html 处理
gulp.task('html-dist', ()=>{
return gulp.src([distPath.manifest, ...srcPath.html])
.pipe(include({
}))
.pipe(revCollector())
.pipe(minifyHtml({
collapseWhitespace: true,
}))
.pipe(gulp.dest(distPath.html))
})
//开发环境
//css处理
gulp.task('css-dev', () => {
return gulp.src(srcPath.css)
.pipe(sass())
.pipe(autoprefixer({
browsers: ['last 2 versions'],
cascade: false,
}))
.pipe(gulp.dest(distPath.css))
.pipe(reload({stream: true}))
})
//js处理
gulp.task('js-dev', ()=>{
return gulp.src(srcPath.js)
// .pipe(babel({
// presets: ['env'],
// }))
.pipe(gulp.dest(distPath.js))
.pipe(reload({stream: true}))
})
//library 处理
gulp.task('library-dev', ()=>{
return gulp.src(srcPath.library)
.pipe(gulp.dest(distPath.library))
.pipe(reload({stream: true}))
})
//image 处理
gulp.task('images-dev', ()=>{
return gulp.src(srcPath.images)
.pipe(gulp.dest(distPath.images))
.pipe(reload({stream: true}))
})
//html 处理
gulp.task('html-dev', ()=>{
return gulp.src(srcPath.html)
.pipe(include({
}))
.pipe(gulp.dest(distPath.html))
.pipe(reload({stream: true}))
})
//清除dist目录
gulp.task('clean', ()=>{
return gulp.src('dist/*')
.pipe(clean({read: false}))
})
//清除manifest
gulp.task('clean-manifest', ()=>{
return gulp.src('dist/**/*.json')
.pipe(clean({read:false}))
})
//静态服务器
gulp.task('browserSync', ()=>{
browserSync.init({
server: {
baseDir: './dist',
//proxy: 'ip地址',
}
})
})
gulp.task('check-dist', ()=>{
browserSync.init({
server: {
baseDir: './dist',
//proxy: 'ip地址',
}
})
})
// build
gulp.task('build', gulpSequence('clean', ['images-dist', 'js-dist', 'library'], 'css-compile', 'css-dist', 'html-dist', 'clean-manifest'));
// dev
gulp.task('dev', (cb)=>{
gulpSequence('clean', ['library', 'css-dev','images-dev', 'js-dev', 'html-dev'], 'browserSync')(cb);
gulp.watch('src/**/*.scss', ['css-dev']);
gulp.watch('src/**/*.html', ['html-dev']);
gulp.watch(srcPath.js, ['js-dev']);
gulp.watch(srcPath.library, ['library-dev']);
gulp.watch(srcPath.images, ['images-dev']);
})

一份比较完整的gulpfile.js的更多相关文章

  1. 通过Anuglar Material串串学客户端开发 - javascript编译和gulpfile.js

    Angular Material不仅仅有本身框架的源代码,还有在这个框架上实现的一个应用docs.更为强大的是,这个应用是真正的产品网站:就是它的官网.我有理由相信,这个网站是从源代码直接发布的,从网 ...

  2. gulp的使用(二)之gulpfile.js文件的配置

    Gulpfile.js是什么文件: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她, ...

  3. gulpfile.js不断更新中...

    Gulp压缩合并js/css文件,压缩图片,以及热更新教程 var gulp = require('gulp');var concat = require('gulp-concat');//- 多个文 ...

  4. gulp-load-task 解决 gulpfile.js 过大的问题

    当我们在项目中使用gulp来实现前端自动化时,常常因任务太多导致gulpfile.js越来越臃肿,增加后期维护/变更成本.在计算机科学领域中,分治可以将我们的项目变得井然有序.所以,我们利用这个理念, ...

  5. gulpfile.js文档

    gulp watch 实现监听不仅需要package.json文档,还需要gulpfile.js文档.否则无法实现. 1.gulp的安装 1.1 首先必须先安装node.js.这个可以参考之前的博客& ...

  6. gulp 图片、样式、js、实时刷新等压缩gulpfile.js文件各个模块

    1.压缩tinypng图片   gulp-tinypng-nokey,但不压缩gif格式(另外一个gulp-imagemin压缩率不高,可以压缩gif格式) // 获取 gulp var gulp = ...

  7. 编写gulpfile.js文件:压缩合并css、js

    使用gulp一共有四个步骤: 1. 全局安装 gulp: $ npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: $ npm inst ...

  8. node入门(二)——gulpfile.js初探

    本文关于gulpfile.js怎么写,利于完成个性化需求.本文开发环境默认已安装node,详情参考<node入门(一)——安装>. 一.安装gulp npm install -g gulp ...

  9. Gulpfile.js——编译、压缩、合并js和css文件

    gulp 一个入门教程:http://www.ydcss.com/gulp API文档地址:http://www.gulpjs.com.cn/docs/api/ 我的一个Low版的gulpfile v ...

随机推荐

  1. Cannot load JDBC driver class 'com.mysql.jdbc.Driver '

    最近在学JAVA, SSM, 照着网上的例子系统启动后总是报这个错(IDE :IEDA): HTTP Status 500 - Request processing failed; nested ex ...

  2. VS调试的问题

    调试Vs,使用本地IIS也不行,使用外部服务器也不行,最后运行VS2013以管理员身份就可以了

  3. BZOJ 3043 IncDec Sequence:反向差分

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3043 题意: 给定一个长度为n的数列a[i],每次可以选择一个区间[l,r],使这个区间内 ...

  4. 搭建LoadRunner中的场景(三)场景的执行计划

    所谓场景操作,包括初始化用户组.启动用户组各用户以及停止虚拟用户的全过程.依据设置不同,执行过程中可以最多有5类操作,分别是启动用户组(start group).初始化(Initialize).启动虚 ...

  5. 程序猿老公去米国参加 WWDC,顺便想带渡老婆蜜月,如何办签证?

    这个问题要拆开描述比较好:1. 老公是苹果开发者,抽中了2014 WWDC购票机会,打算自费去参加.如果自己成行,应该办何种签证?2. 顺带,两人新婚半年还未安排蜜月,打算提前几天过去先游览一下西海岸 ...

  6. 在node.js中建立你的第一个HTTp服务器

    这一章节我们将从初学者的角度介绍如何建立一个简单的node.js HTTP 服务器 创建myFirstHTTPServer.js //Lets require/import the HTTP modu ...

  7. Go丨语言对数据库操作报错 panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.

    panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine ac ...

  8. AtCoder AGC #2 Virtual Participation

    在知乎上听zzx大佬说AGC练智商...于是试了一下 A.Range Product 给$a$,$b$,求$\prod^{b}_{i=a}i$是正数,负数还是$0$ ...不写了 B.Box and ...

  9. 解决 sublime text3 运行python文件无法input的问题

    怎么输入都没有用,原来需要配置可交互环境来运行 首先,Ctrl+Shift+p快捷键,弹出框框输入 install Package,回车后又弹出一个框,输入SublimeREPL(要安装的插件名字), ...

  10. 五 Vue学习 首页学习 (上)

    首页:   http://localhost:8002/#/,  登录页面如下: index.js文件中如下的路由配置,转过去看login.vue是如何实现的. const routes = [ { ...