自用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搭建站点时,往往须要使用 ...
随机推荐
- 终端命令行前出现(base)
原因 (base) 的出现是因为电脑安装了conda后,每次打开终端都会自动启动conda的base环境 解决 取消自动启动base环境:conda config --set auto_activat ...
- 2023-03-22:给定一个字符串str, 如果删掉连续一段子串,剩下的字符串拼接起来是回文串, 那么该删除叫做有效的删除。 返回有多少种有效删除。 注意 : 不能全删除,删成空串不允许, 字符串长
2023-03-22:给定一个字符串str, 如果删掉连续一段子串,剩下的字符串拼接起来是回文串, 那么该删除叫做有效的删除. 返回有多少种有效删除. 注意 : 不能全删除,删成空串不允许, 字符串长 ...
- 2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记
2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记 ...
- 2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生?
福哥答案2021-01-02: MinorGC 在年轻代空间不足的时候发生.MajorGC 指的是老年代的 GC,出现 MajorGC 一般经常伴有 MinorGC.FullGC 老年代无法再分配内存 ...
- 2022-06-18:golang与 C++数据结构类型对应关系是怎样的?
2022-06-18:golang与 C++数据结构类型对应关系是怎样的? 答案2022-06-18: uintptr和unsafe.Pointer相当于c++的void*,也就是任意指针. uint ...
- 2021-05-29:最常使用的K个单词II。在实时数据流中找到最常使用的k个单词,实现TopK类中的三个方法: Top
2021-05-29:最常使用的K个单词II.在实时数据流中找到最常使用的k个单词,实现TopK类中的三个方法: TopK(k), 构造方法.add(word),增加一个新单词.topk(),得到当前 ...
- Java网络编程----通过实现简易聊天工具来聊聊BIO
IO模型即输入输出模型,我们今天主要来聊的是java网络编程中的IO模型---BIO模型.BIO即阻塞式IO,Blocking IOblocking [ˈblɒkɪŋ] v. 堵塞; 阻塞; 堵住(某 ...
- Windows服务程序管理器 - 开源研究系列文章
这些天弄了一个Windows服务程序管理器,主要是对需要的Windows服务程序进行管理.这个也能够将自己开发的服务程序注册到操作系统里去运行. 1. 项目目录: 目录见下图,对代码进行 ...
- 让ChatGPT帮我写SQL
推荐一个Github上Start超过3.4K,可将自然语言转化为SQL语句的开源项目. 项目简介 这是一个利用ChatGPT,SQL与自然语言的翻译器.可以将自然语言转换为SQL语句,同样也可以把SQ ...
- computed与watch监听同一对象的场景
今日项目需要一个详细的权限配置,如:路由权限,页面tabs权限,操作权限:而路由权限大都知道就不赘述,而操作权限这就涉及页面中每个按钮了,这里使用VUEX进行管理 1.配置store store 中 ...