基于gulp的前端自动化开发构建
就前端的发展而言会越来越朝着后端的标准化靠近,后端的工程化以及模块化都很成熟。基于这样一个思路,开始探索如何优化目前的开发流程。而使用的工具就是gulp。
个人觉得gulp比较webpack更为简单实用,gulp依靠插件工作,webpack除了插件还有各种loader。当然这不是重点,重点是能够确实解决问题。目前公司对前端开发并没有一个明确的要求,所以个人根据现有的开发流程以及开发认识,写了如下的代码。
目录结构,src内部的相关文件和代码,最终编译到dist中,dist就是发布的代码

然后是package.json文件
{
"name": "gulpf",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel-core": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"browser-sync": "^2.23.6",
"del": "^3.0.0",
"gulp": "^3.9.1",
"gulp-autoprefixer": "^5.0.0",
"gulp-babel": "^7.0.1",
"gulp-base64": "^0.1.3",
"gulp-clean": "^0.4.0",
"gulp-clean-css": "^3.9.3",
"gulp-htmlmin": "^4.0.0",
"gulp-imagemin": "^4.1.0",
"gulp-plumber": "^1.2.0",
"gulp-sass": "^4.0.1",
"gulp-spriter": "^1.1.5",
"gulp-uglify": "^3.0.0",
}
}
然后是gulpfile.js具体的代码
var gulp = require('gulp'),
clean=require("gulp-clean"),
htmlmin = require('gulp-htmlmin'),
sass=require('gulp-sass'),
base64=require('gulp-base64'),
imageMin = require('gulp-imagemin'),
uglify = require('gulp-uglify'),
clean_css = require('gulp-clean-css'),
babel = require("gulp-babel"),
browserSync = require('browser-sync').create(),
plumber = require('gulp-plumber'),
autoprefixer = require('gulp-autoprefixer');
//编译sass
gulp.task('scss', function () {
gulp.src('src/scss/*.scss')
.pipe(plumber({ errHandler: e => {
gutil.log(e); // 抛出异常
}}))
.pipe(sass())
.pipe(base64({
extensions: ['svg','png','jpg','jpeg'],
maxImageSize: *, // bytes
debug: true
}))
.pipe(autoprefixer({
browsers: ['last 2 versions'],
cascade: false
}))
.pipe(clean_css())
.pipe(gulp.dest('dist/css/'))
});
//转译es6
gulp.task("es6",function(){
gulp.src('src/js/*.js')
.pipe(babel({
presets: ['es2015']
}))
.pipe(uglify())
.pipe(gulp.dest('dist/js/'))
})
//清除图片文件
gulp.task("cleanimgs",function(){
gulp.src("dist/imgs/",{read:false})
.pipe(clean())
})
//清除html文件
gulp.task("cleanhtml",function(){
gulp.src("dist/html/*.html",{read:false})
.pipe(clean())
})
//拷贝压缩imgs
gulp.task("imgs",function(){
gulp.src('src/imgs/*')
.pipe(imageMin({progressive: true}))
.pipe(plumber({ errHandler: e => {
gutil.log(e); // 抛出异常
}}))
.pipe(gulp.dest('dist/imgs/'))
})
//拷贝html
gulp.task("html",function(){
var options = {
removeComments: true,//清除HTML注释
collapseWhitespace: true,//压缩HTML
collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
minifyJS: true,//压缩页面JS
minifyCSS: true//压缩页面CSS
};
gulp.src('src/*.html')
.pipe(htmlmin(options))
.pipe(gulp.dest('dist/'));
})
//默认任务
gulp.task('default',['cleanimgs','scss','es6','imgs','cleanhtml','html'],function(done) {
browserSync.init({
//指定服务器启动根目录
server: "./dist"
});
//监听sass编译,修改了才删除
gulp.watch("src/scss/*.scss", ['cleancss','scss']);
//监听sass编译
gulp.watch("src/js/*.js", ['es6']);
//监听图片变化
gulp.watch("src/imgs/*", ['cleanimgs','imgs']);
//监听html变化
gulp.watch("src/*.html", ['html']);
//监听任何文件变化,实时刷新页面
gulp.watch(["src/scss/*.scss","src/js/*.js","src/*.html","src/imgs/*"]).on('change',browserSync.reload);
});
上述代码实现的功能有
1,实时刷新浏览器,不管是html变化,css变化,还是js变化
2,使用sass,转译sass为css,并且自动加浏览器前缀并且压缩
3,对es6进行转译并且压缩
4,对小图片进行base64转化,减少http请求数
5,压缩html文件内容
6,gulp-plumber这个插件的作用是,避免插件错误,终端gulp执行
当然,本代码还有优化的余地,比如雪碧图的使用,比如合并相关的css和js文件,再比如给js文件和css加MD5进行增量式更新,放置缓存。并且直接替换html中代码。
倒是尝试了给js和css添加md5,但是最终效果不稳定,所以没有写文章中,本文就算是工程化构建代码的一个1.0版本吧,至少对自己开发还是有很大帮助的。后续会考虑研究加上md5.
本文结束。
基于gulp的前端自动化开发构建的更多相关文章
- 基于gulp的前端自动化开发构建新
关于gulp的使用,已经在之前写过一篇文章,但是遗留了一个问题.问题是实现文件的增量式更新,就是给html引入的js和css文件打上标记.每次更新标记更新. 上篇文章想通过开发同时实现标记的实时更新, ...
- 基于gulp 的前端自动化构建方案总结
一,基础篇 先安装nodejs 使用淘宝镜像安装tnpm 安装 cnpm 插件:npm install -g cnpm --registry=https://registry.npm.taobao.o ...
- 基于gulp的前端自动化方案
前言 最近几年前端技术发展日新月异,特别是单页应用的普及.组件化.工程化.自动化成了前端发展的趋势.webpack已经成为了前端打包构建的主流,但是一些老古董的项目还是存在的,也有优化的必要,正好 ...
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)
相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...
- 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...
- 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)
1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...
- 基于webpack的前端工程化开发解决方案探索(二):代码分割与图片加载
今天我们继续来进行webpack工程化开发的探索! 首先来验证上一篇文章 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML 中的遗留问题:webpack将如何处理按需加载的 ...
随机推荐
- Python学习4——print打印
print(): 在控制台输出变量的值: print打印完后换行: print(123) # 完整模式:print(123,end="\n") 希望打印完不换行: print(1 ...
- 嘿,C语言(持续更新中...)
---恢复内容开始--- 上次简单介绍了一下C语言,这次说说数据与计算程序,那么话不多说,进来看看. 第二章 数据与简单的计算程序 一:数据 既然说到了数据,那么说说什么是写数据呢? 表面意 ...
- c语言杨氏矩阵算法
杨氏矩阵 有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在.时间复杂度小于O(N);数组:1 2 32 3 43 4 5 1 3 42 4 54 5 ...
- cannot import name '_imaging' 报错
例子如下: from PIL import Image import pytesseract as pt text = pt.image_to_string(Image.open("text ...
- mybatis入门(一):jdbc的缺点
mybatis的基础内容 1.mybatis的框架原理 2.mybatis开发dao两种方法: a.原始dao开发方法(程序需要编写dao接口和dao实现类) b.mybatis的mapper接口(相 ...
- 破解使用SMB协议的Windows用户密码:acccheck
一.工作原理 Acccheck是一款针对微软的SMB协议的探测工具(字典破解用户名和密码),本身不具有漏洞利用的能力. SMB协议:SMB(Server Message Block)通信协议主要是作为 ...
- [数据结构]_[C/C++]_[链表的最佳创建方式]
场景 1.链表在C/C++里使用非常频繁, 因为它非常使用, 可作为天然的可变数组. push到末尾时对前面的链表项不影响. 反观C数组和std::vector, 一个是静态大小, 一个是增加多了会对 ...
- 回写盘写速度被限速为10M左右
问题现像如下图所示: 用hd-speed等测试虚拟盘速度都能达到90M/s左右,但复制文件到虚拟盘速度最高只有10M/s 原因:由于客户机开机加载这个随机驱动和随机进程后,会对磁盘启动进程等有扫描检查 ...
- UPA深度性能报告解读
WeTest 导读 UPA作为腾讯WeTest与Unity官方联合打造的客户端性能分析工具,为开发者提供了极大的便利和效能提升.产出的分析报告内容详尽,但您是否真的读懂了报告?是否了解每项数据的含义? ...
- 【独家】K8S漏洞报告 | 近期bug fix解读&1.9.11主要bug fix汇总
*内容提要: 1. Kube-proxy长连接优雅断开机制及IPVS模式实现 2. 10/29--11/19 bug fix汇总分析 3. 1.9.11重要bug fix汇总 在本周的跟踪分析中,以1 ...