gulp压缩html,css,js文件流程、监听任务、使用gulp创建服务器、同时运行多个任务、反向代理
一、初始化
首先先做一个项目初始化,用来记录你项目中用到的工具
再你项目文件下打开一个控制台,输入命令 yarn init -y 进行初始化

输入命令yarn add gulp -g --- 全局安装gulp,这里我提前已经安装过了就不演示了,然后再输入命令yarn add gulp -S 局部安装,都安装完成过后输入命令 gulp -v,如果出现两个版本号,就代表都安装成功了

接着在你的项目文件夹下新建一个文件名为 gulpFile.js js文件,名字必须叫这个,官方规定的,用来写gulp命令

好了,可以开始安装压缩工具进行压缩了
二、html压缩
安装html压缩工具,输入命令
yarn add gulp-htmlmin -D
安装压缩html的工具,安装到开发环境,生产环境用不到
安装完成过后打开初始化时生成的文件 package.json,开发环境有没有你刚安装的 gulp-htmlmin

打开开始建的 gulpFile.js 文件,开始写命令
const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html压缩模块
const path = { //方便管理路径
html: {
src: 'src/**/*.html',
dest: 'dist'
}
}
gulp.task('html', () => { //创建任务,并命名任务名
/*一个*表示所有文件,两个*表示所有目录*/
return gulp.src(path.html.src) //打开读取文件
.pipe(htmlmin({
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: false, //删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
minifyJS: true, //压缩页面JS
minifyCSS: true //压缩页面CSS
})) //管道流操作,压缩文件
.pipe(gulp.dest(path.html.dest)) //指定压缩文件放置的目录
})
然后输入命令
gulp html
执行压缩

像这样就压缩成功了
上面是 gulp3 写法,gulp4 写法:
const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html压缩模块
const path = { //方便管理路径
html: {
src: 'src/**/*.html',
dest: 'dist'
}
}
const html = () => { //创建任务,并命名任务名
/*一个*表示所有文件,两个*表示所有目录*/
return gulp.src(path.html.src) //打开读取文件
.pipe(htmlmin({
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: false, //删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
minifyJS: true, //压缩页面JS
minifyCSS: true //压缩页面CSS
})) //管道流操作,压缩文件
.pipe(gulp.dest(path.html.dest)) //指定压缩文件放置的目录
}
module.exports = { //一定要以对象形式导出
html
}
三、css压缩
安装css压缩模块,输入命令
yarn add gulp-clean-css -D

然后也在gulpFile.js文件里写压缩css的命令
const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html压缩模块
const cleanCss = require('gulp-clean-css') //引入css压缩模块
const path = { //方便管理路径
/*一个*表示所有文件,两个*表示所有目录*/
html: {
src: 'src/**/*.html',
dest: 'dist'
},
css: {
src: 'src/**/*.css',
dest: 'dist'
}
}
gulp.task('css', () => {
return gulp.src(path.css.src)
.pipe(cleanCss())
.pipe(gulp.dest(path.css.dest))
})
输入命令 gulp css 命令执行

另外css还有一个很好用的模块,它可以自动给需要兼容的css属性加前缀,输入命令安装它
yarn add gulp-autoprefixer -D
安装好了,引入模块,调用即可
四、js压缩
安装js es6语法转es5语法模块,压缩js模块,输入命令
yarn add -D gulp-babel @babel/core @babel/preset-env //es6语法转es5
yarn add -D gulp-uglify //压缩js

同样的打开 gulpFile.js 文件写压缩js的命令
const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html压缩模块
const cleanCss = require('gulp-clean-css') //引入css压缩模块
const autoprefixer = require('gulp-autoprefixer') //引入加前缀模块
const babel = require('gulp-babel'), //引入es6转es5模块
uglify = require('gulp-uglify') //引入js压缩模块
const path = { //方便管理路径
/*一个*表示所有文件,两个*表示所有目录*/
html: {
src: 'src/**/*.html',
dest: 'dist'
},
css: {
src: 'src/**/*.css',
dest: 'dist'
},
js: {
src: 'src/**/*.js',
dest: 'dist'
}
}
gulp.task('js', () => {
gulp.src(path.js.src)
.pipe(babel({
presets: ['@babel/env'] //es6转es5
}))
.pipe(uglify()) //执行压缩
.pipe(gulp.dest(path.js.dest))
})
输入命令 gulp js 运行
五、监听任务
监听任务需要使用gulp4的写法
const gulp = require('gulp') //引入gulp
const htmlmin = require('gulp-htmlmin') //引入html压缩模块
const cleanCss = require('gulp-clean-css') //引入css压缩模块
const autoprefixer = require('gulp-autoprefixer') //引入加前缀模块
const babel = require('gulp-babel'), //引入es6转es5模块
uglify = require('gulp-uglify') //引入js压缩模块
const path = { //方便管理路径
/*一个*表示所有文件,两个*表示所有目录*/
html: {
src: 'src/**/*.html',
dest: 'dist'
},
css: {
src: 'src/**/*.css',
dest: 'dist'
},
js: {
src: 'src/**/*.js',
dest: 'dist'
}
}
const css = () => {
return gulp.src(path.css.src)
.pipe(autoprefixer())
.pipe(cleanCss())
.pipe(gulp.dest(path.css.dest))
}
const js = () => {
return gulp.src(path.js.src)
.pipe(babel({
presets: ['@babel/env'] //es6转es5
}))
.pipe(uglify()) //执行压缩
.pipe(gulp.dest(path.js.dest))
}
const html = () => { //创建任务,并命名任务名
return gulp.src(path.html.src) //打开读取文件
.pipe(htmlmin({
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: false, //删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
minifyJS: true, //压缩页面JS
minifyCSS: true //压缩页面CSS
})) //管道流操作,压缩文件
.pipe(gulp.dest(path.html.dest)) //指定压缩文件放置的目录
}
const watch = () => { //监听文件,文件改变执行对应的任务
gulp.watch(path.html.src, html)
gulp.watch(path.css.src, css)
gulp.watch(path.js.src, js)
}
module.exports = {
html,
js,
css,
watch
}
输入命令 gulp watch 即可实现监听
六、gulp创建服务器
输入命令
yarn add gulp-connect -D
引入模块
const connect = require('gulp-connect')
创建服务器
const server = () => {
connect.server({ //创建服务器
root: 'dist',//根目录
port: '2000',//端口号
livereload:true//服务器热更新
})
}
导出模块
module.exports = {
html,
js,
css,
watch,
server
}
输入命令 gulp server 就可以运行了
如果想直接打开首页,可以输入命令安装open模块
yarn add open -S
然后再任何位置写入你想打开的网址
open('http://127.0.0.1:2000')
还有一个模块也可以创建服务器
输入命令安装
yarn add gulp-webServer -D

引入模块
const webserver = require('gulp-webserver')
创建服务器
const createServer = () => {
return gulp.src('./dist')
.pipe(webserver({ //创建服务器
port:'3000', //端口号
open:'/html', //默认打开路径
livereload:true //热更新
}))
}
七、同时运行多个任务
// 默认任务:default 我们可以把所有任务都放进default
// series 同步执行,先执行删除dist任务,再执行其他任务
// parallel 异步执行(并行),不会互相影响的任务可以并行
module.exports.default = gulp.series(gulp.parallel(html,js,css,watch,server))
运行只需要写 gulp 命令
如果想页面实时更新的话,再想实时更新的任务后面加上
.pipe(connect.reload())
然后重启服务器就ok了
八、反向代理
输入命令
yarn add http-proxy-middleware -D

引入模块
const proxy = require('http-proxy-middleware')
创建反向代理
const server = () => {
connect.server({ //创建服务器
root: 'dist', //根目录
port: '2000', //端口号
livereload: true, //服务器热更新
middleware: () => {
return [
proxy.createProxyMiddleware('/api', { //创建反向代理,请求已 /api 开头就使用target的服务器
target: 'http://localhost',//需要代理的服务器
changeOrigin: true
})
]
}
})
}
gulp压缩html,css,js文件流程、监听任务、使用gulp创建服务器、同时运行多个任务、反向代理的更多相关文章
- Django使用本地css/js文件
Django使用本地css/js文件 在manager.py同层级下创建static文件夹, 里面放上css , js, images等文件或者文件夹 我的文件夹层级 然后只需在settings.py ...
- Gulp:静态资源(css,js)版本控制
为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源: 然后涉及到的html模板里的src也要做相应的修改,静态资源需要优化(压缩合并) 文件目录 ...
- js活jQuery实现动态添加、移除css/js文件
下面是在项目中用到的,直接封装好的函数,拿去在js中直接调用就可以实现css.js文件的动态引入与删除.代码如下 动态加载,移除,替换css/js文件 // 动态添加css文件 function ad ...
- 在桌面右键创建html,css,js文件
1.在开始里面输入regedit,进入注册表编辑器. 2.打开HKEY_CLASSES_ROOT项. 3.打开.html/.css/.js项. 4.右键新建项,起名ShellNew. 5.新建字符串值 ...
- jsp 引用css/js文件返回html网页问题
我的问题: 我直接在web.xml中匹配了 “/” ,以为能默认使用 “localhost:8080/news/” 这种方式,直接进入首页. 但是这样会匹配所有url 因此请求的 ***.js/*** ...
- JS通用事件监听函数
JS通用事件监听函数 版本一 //把它全部封装到一个对象中 var obj={ readyEvent:function (fn){ if(fn==null){ fn=document; } var o ...
- js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写
js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写 一.总结 一句话总结:滚动事件scroll(),浏览器窗口调整监听resize(),思考好监听对象. 1.滚动事件scroll()的监听对象是 ...
- 修改 processor.php 文件,监听用户对该应用的消息
修改 processor.php 文件,监听用户对该应用的消息 class cgc_fdModuleProcessor extends WeModuleProcessor { public funct ...
- js添加事件监听的方式与this
js添加事件监听与this js添加事件监听的方式与this 在标签中调用自定义函数 DOM0级事件处理程序 DOM2级事件处理程序 this 代表谁? js添加事件监听的方式与this <di ...
随机推荐
- python 串口 透传
python正常情况通过串口 serial 传输数据的时候,都是以字符串的形式发送的 str = ‘abcd’ ser.write(str.encode())#直接发送str报错,需要发送byte类 ...
- Less定义变量
1. 定义: 使用 @ 符号来定义变量 ,在Less中开头是 @ 则是变量,关于变量的命名方法,大家可以参考js中命名的规则,毕竟是做前端的,有着统一的习惯有助于我们统一风格.个人推荐变量名的命名规则 ...
- Spring 使用注解对事务控制详解与实例
1.什么是事务 一荣俱荣,一损俱损,很多复杂的操作我们可以把它看成是一个整体,要么同时成功,要么同时失败. 事务的四个特征ACID: 原子性(Atomic):表示组成一个事务的多个数据库的操作的不可分 ...
- CF652E Pursuit For Aritifacts
题目传送门 这是一道很好的练习强联通的题目. 首先,从题中可以看到,题目的要求就是要我们求出从起点到终点是否可以经过flag = 1 的边. 由于是无向图,且要求很多,直接暴力dfs会很凌乱. 那么, ...
- [JavaWeb基础] 020.Velocity 模板引擎简单示例
1.什么是Velocity 一种J2EE的前端模版技术,和JSP,Freemarker差不多,都是用来展示网页内容的.和JSP不同的是velocity只能显示Action中的数据,不能处理数据.不能写 ...
- [书籍分享]0-001.rework(重来:更为简单有效的商业思维)
封面 内容简介 大多数的企业管理的书籍都会告诉你:制定商业计划.分析竞争形势.寻找投资人等等.如果你要找的是那样的书,那么把这本书放回书架吧. 这本书呈现的是一种更好.更简单的经商成功之道.读完 ...
- 我终于搞清了啥是 HTTPS 了
引言 最近上海连续下了一周雨,温度一夜之间回到解放前,穿夏装的我被冻得瑟瑟发抖,躲在家里哪也不想去. 在家百无聊赖的刷着网页,看到公众号后台的留言,有同学问我 HTTP 和 HTTPS 有啥区别? 这 ...
- 一个神秘URL酿大祸,差点让我背锅!
神秘URL 我叫小风,是Windows帝国一个普通的上班族.上一回说到因为一个跨域请求,我差点丢了饭碗,好在有惊无险,我的职场历险记还在继续. "叮叮叮叮~~~~",闹钟又把我给吵 ...
- Java实现 LeetCode 495 提莫攻击
495. 提莫攻击 在<英雄联盟>的世界中,有一个叫 "提莫" 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态.现在,给出提莫对艾希的攻击时间序列和 ...
- Java实现 蓝桥杯VIP 算法提高 质因数2
算法提高 质因数2 时间限制:1.0s 内存限制:256.0MB 将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出.最后输出质因数的个数. 输入格式 一行,一个 ...