自用gulp打包脚本,压缩html,压缩js,压缩css,压缩图片,功能齐全
const gulp = require('gulp');
const fs = require('fs');
const htmlmin = require('gulp-htmlmin');
const uglify = require('gulp-uglify');
const uglifyEs = require('uglify-es');
const minifyCSS = require('gulp-minify-css');
const imagemin = require('gulp-imagemin');
const babel = require('gulp-babel');
const replace = require('gulp-replace');
const version = new Date().getTime();
/**
* 清空
*/
function clear(dist = 'dist') {
if (fs.existsSync(dist)) {
console.log("清空");
fs.rmSync(dist, { recursive: true });
}
}
function compressHtml(src, base = 'src', dist = 'dist') {
gulp.src(src, { base: base, allowEmpty: true })
.pipe(replace('199210103019', version + ''))
.pipe(replace(/(<link\s+.+\.css\?[^\"]+)/gi, '$1&zqd=' + version))
.pipe(replace(/(<link\s+.+\.css)\"/gi, '$1?zqd=' + version + '"'))
.pipe(replace(/(<script\s+.+\.js\?[^\"]+)/gi, '$1&zqd=' + version))
.pipe(replace(/(<script\s+.+\.js)\"/gi, '$1?zqd=' + version + '"'))
.pipe(htmlmin({
removeComments: true,
collapseWhitespace: true,
minifyCSS: true,
minifyJS: file => uglifyEs.minify(file, { mangle: true }).code
}))
.pipe(gulp.dest(dist));
}
function compressJs(src, base = 'src', dist = 'dist') {
gulp.src(src, { base: base, allowEmpty: true })
.pipe(replace('199210103019', version + ''))
.pipe(babel())
.pipe(uglify({ mangle: { toplevel: true }, output: { ascii_only: true } }))
.pipe(gulp.dest(dist));
}
function compressCss(src, base = 'src', dist = 'dist') {
gulp.src(src, { base: base, allowEmpty: true })
.pipe(minifyCSS())
.pipe(gulp.dest(dist));
}
function compressImage(src, base = 'src', dist = 'dist') {
gulp.src(src, { base: base })
.pipe(imagemin({
optimizationLevel: 5,
progressive: true,
webp: { quality: 75 },
pngquant: { quality: '60-80' },
svgoPlugins: [{ removeViewBox: false }]
}))
.pipe(gulp.dest(dist));
}
/**
* 复制源目录到发布目录
* @param {string} src 源目录
* @param {string} dist 发布目录
*/
function cp2Dist(src, dist = 'dist') {
if (typeof (src) === 'string') {
fs.cpSync(src, dist + '/' + src, { recursive: true });
}
else {
for (var s of src) {
fs.cpSync(s, dist + '/' + s, { recursive: true });
}
}
}
/**
* 打包发布
*/
async function release(cb) {
await clear();
await cp2Dist(['favicon.ico', 'layuiadmin', 'views']);
compressHtml([
'*.html',
'views/*.html',
'views/**/*.html'], '.');
compressJs(['layuiadmin/*.js',
'layuiadmin/modules/*.js',
'layuiadmin/lib/*.js',
'!layuiadmin/layui/*.js',
'layuiadmin/lib/**/echartsTheme.js'], '.');
compressCss([
'layuiadmin/style/*.css',
'layuiadmin/style/system/*.css',
'layuiadmin/style/system/ztree/awesomeStyle/layuiAwesome.css'], '.');
compressImage([
'layuiadmin/images/*',
'layuiadmin/style/res/*'], '.');
console.log("完成打包");
return cb();
};
//清空
gulp.task('clear', () => clear());
//打包发布
gulp.task('release', release);
gulp.task('default', release);
自用gulp打包脚本,压缩html,压缩js,压缩css,压缩图片,功能齐全的更多相关文章
- MVC中的JS和CSS压缩
小说一下Js和CSS压缩的好处: 1.减小了文件的体积 2.减小了网络传输量和带宽占用 3.减小了服务器的处理的压力 4.提高了页面的渲染显示的速度 很多建议将站点的静态文件(如图片.js.css ...
- 【MVC】 js,css 压缩
[MVC] js,css 压缩 一. 引用 System.Web.Optimization.dll : 使用 Nuget ,在控制台输入 Install-Package Microsoft.AspNe ...
- 简短的几句js实现css压缩和反压缩功能
写在前面 最近一直在整理css,但因为现在Visual Studio 2013太智能了,它每每在我按ctrl+E+D进行格式化代码的时候,就会将css进行层次格式化(如下图所示),而这个格式让我老大实 ...
- 使用Ant和YUICompressor链接合并压缩你的JS和CSS代码
JS代码和CSS代码在上线前要压缩大家应该都是知道的了.记得之前做项目的时候,最后要交差的时候是找了个网站,将JS代码的文件一个一个地复制,粘贴,复制,粘贴. 当时就在想:TMD有没有好一点的方法,劳 ...
- JS和CSS压缩部署,提高访问效率
一直想把项目中的js和css压缩下,今天终于搞定了. 先说说几个注意的问题,目标影响着你对应的解决办法:1.压缩后的文件,是否要直接覆盖旧的文件2. 单个压缩文件重命名,还是整个目录换个名字,同时文件 ...
- 一、FreeMarker实现对js和css压缩
1.代码压缩理解:实际上就是将原有的文本中无用的注释.空行.空格去掉来压缩文件的大小.进行js和css压缩会带来如下好处:1)减小了文件的体积,减少文件占用的内存;2)减小了网络传输量和带宽占用; 3 ...
- vue打包后js和css、图片不显示,引用的字体找不到问题
vue打包后js和css.图片不显示,引用的字体找不到问题:图片一般都是背景图片. 一.vue打包出现js和css不显示问题: 1.不使用mode:'history' 2.使用mode:'histor ...
- Ajax清除浏览器js、css、图片缓存的方法
做东东时都是把图片在服务器的地址存放在数据库里面,然后到浏览器中显示,但是后来发现了两个问题. 第一:为了安全起见,js是无法读取本地的图片的,不然你写一个js,岂不是可以获取任何人电脑里面的文件了. ...
- nginx js、css、图片 及 一些静态文件中出现 http://upstreamname:port 导致部分网页样式显示不正常
nginx js.css.图片 及 一些静态文件中出现 http://upstreamname:port 导致部分网页样式显示不正常 http://upstreamname:port/....../. ...
- Django加入JS,CSS,图片等外部文件的方法
Django加入JS,CSS.图片等外部文件的方法 By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 在使用Django搭建站点时,往往须要使用 ...
随机推荐
- [Pytorch框架] 1.7 数据并行
数据并行(选读) Authors: Sung Kim and Jenny Kang 在这个教程里,我们将学习如何使用 DataParallel 来使用多GPU. PyTorch非常容易就可以使用多GP ...
- 基于pip的python包管理工具
以下是软件下载链接:https://mysecreat.lanzoub.com/i5yvf0swgtne 软件功能:可以对python包进行安装.卸载.升级.换源等操作,不用输入复杂命令 源码: im ...
- Grafana系列-统一展示-6-Zabbix仪表板
系列文章 Grafana 系列文章 Notes: 关于 Grafana系列-统一展示-6-Zabbix 数据源, 其实已经在之前的文章: 使用 Grafana 统一监控展示 - 对接 Zabbix 里 ...
- 2023-03-28:有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置, 你可以按顺序完成切割,也可
2023-03-28:有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置. 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置, 你可以按顺序完成切割,也可 ...
- MassTransit实现Saga模式概览
原文地址:Saga Overview 编排一系列事件的能力是一个强大的功能,而MassTransit使这成为可能. saga是由协调器管理的长期事务.saga是由事件发起的,saga编排事件,saga ...
- go 实现ringbuffer以及ringbuffer使用场景介绍
ringbuffer因为它能复用缓冲空间,通常用于网络通信连接的读写,虽然市面上已经有了go写的诸多版本的ringbuffer组件,虽然诸多版本,实现ringbuffer的核心逻辑却是不变的.但发现其 ...
- Linux服务器设置虚拟内存
cd /usrsudo mkdir swapcd swapsudo dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=4096du -sh /usr/ ...
- 如何解决安装完 webdriver-helper 但不可用的问题?
一.问题分析 使用 selenium ,并使用自动化安装浏览器驱动的方法,下载 webdriver_helper 的官网:webdriver-helper · PyPI.下载完成后在终端使用 pip ...
- API NEWS | 三个Argo CD API漏洞
欢迎大家围观小阑精心整理的API安全最新资讯,在这里你能看到最专业.最前沿的API安全技术和产业资讯,我们提供关于全球API安全资讯与信息安全深度观察. 本周,我们带来的分享如下: 关于三个Argo ...
- 使用containerd从0搭建k8s(kubernetes)集群
准备环境 准备两台服务器节点,如果需要安装虚拟机,可以参考<wmware和centos安装过程> 机器名 IP 角色 CPU 内存 centos01 192.168.109.130 mas ...