Gulp压缩文件

首先感谢群里这个大佬发的这个PDF资料,我把它整理成文章分享在这,希望以后自己忘了也是一种不错的笔记

能够帮助用户自动压缩静态资源,配合各类下属插件,能够压缩包括 CSS、JS、HTML各类格式的图片。但图片文件的压缩往往只能节省几十 KB,效果远不如imagine、tinypng 等压缩方式,所以此处不再写使用 Gulp 压缩图片。

以下操作都在 Git Bash here 界面进行。

1.  安装 Gulp 插件

# 全局安装 gulp 指令集

npm install --global gulp-cli

# 安装 gulp 插件

npm install gulp --save

2.  安装压缩 HTML 的插件

npm install gulp-htmlclean --save-dev
# ⽤ gulp-html-minifier-terser 可以压缩 HTML 中的 ES6 语法
npm install gulp-html-minifier-terser --save-dev

3.  安装压缩 CSS 的插件

npm install gulp-clean-css --save-dev

4.安装压缩 JS 的插件

npm install gulp-terser --save-dev
npm install gulp-fontmin --save-dev

5.创建 gulpfile.js 任务脚本

在博客根目录下新建 gulpfile.js ,打开 gulpfile.js ,添加以下内容。

//⽤到的各个插件
var gulp = require("gulp");
var cleanCSS = require("gulp-clean-css");
var htmlmin = require("gulp-html-minifier-terser");
var htmlclean = require("gulp-htmlclean"); var fontmin = require("gulp-fontmin");
// gulp-tester
var terser = require("gulp-terser");

// 压缩js gulp.task("compress", () =>
gulp
.src(["./public/**/*.js", "!./public/**/*.min.js"]) .pipe(terser())
.pipe(gulp.dest("./public"))
);

//压缩css gulp.task("minify-css", () => {
return gulp .src(["./public/**/*.css"])
.pipe(
cleanCSS({
compatibility: "ie11",
})
)
.pipe(gulp.dest("./public"));
});

//压缩html
gulp.task("minify-html", () => {
return gulp .src("./public/**/*.html")
.pipe(htmlclean()) .pipe(
htmlmin({
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 minifyURLs: true, //压缩⻚⾯URL
})
)
.pipe(gulp.dest("./public"));
});

//压缩字体
function minifyFont(text, cb) {
gulp
.src("./public/fonts/*.ttf") //原字体所在⽬录.pipe(
fontmin({
text: text,
})
)
.pipe(gulp.dest("./public/fonts")) //压缩后的输出⽬录.on("end", cb);
}
gulp.task("mini-font", (cb) => {
var buffers = [];
    gulp
.src(["./public/**/*.html"]) //HTML文件所在⽬录请根据⾃⾝情况修改
.on("data", function (file) {
buffers.push(file.contents);
})
.on("end", function () {
var text = Buffer.concat(buffers).toString("utf-8");
minifyFont(text, cb);
});

});
// 运⾏gulp命令时依次执⾏以下任务gulp.task(
"default",
gulp.parallel("compress", "minify-css", "minify-html", "mini-
font") );
              

注意:压缩字体的格式只能为 ttf 格式,且字体应该存放在 source\fonts 目录下。你也可以按照你的文件存放位置修改 gulpfile.js

6.压缩静态文件

打开 Git Bash here 界面,输入以下指令,开始压缩静态文件。

前提:已 hexo g 生成静态文件。

gulp

如果存在字体文件,压缩效率可达 70%。

使用 Gulp 后,命令如下:

hexo cl && hexo g && gulp && hexo d
hexo cl && hexo g && gulp && hexo s

参考文章:使用 gulp 压缩博客静态资源 | Akilar の糖果屋

常用字字体子集化

在博客上,有一些字,我们想用专门的字体显示,比如博客的标题。中文字体一般都差超过 10MB,只用来显示博客标题,未免有些浪费空间,还减缓网站加载速度。所以我们可以使用 fontmin-app 提取我们想要的字符,并转换成 svg、ttf、woff、eot 等格式。

guthub 链接GitHub - ecomfe/fontmin-app: fontmin as an OS X, Linux and Windows app

fontmin-app 下载链接Fontmin-v0.2.0-win64.exe.zip - 蓝奏云 (lanzout.com)

fontmin-app 使用方法如下:

经测试,使用 fontmin-app 转换的字体,只有使用 字体名-embed.css 内的 base64 编码内嵌,才能正确显示。

示例

/* 以下内容添加至你的 css 文件中 */
@font-face {    font-family: "LXGW_title";    src: url(data:application/x-font-ttf;charset=utf8;base64,xUKEgKTQF6jzao0LxQFDRATDiMdGWClVpBrLTX9yEzDbU5WKShWik6CTAhCDQgOAQIVEQcOGQAAAgAu/+QCCwHwAB0ALAAABSInDgEjIiY1NDc2MzIXNTQyFh0BFDEGFRQXFhQGJRQzMjc2NTQ1BiInAEoATABRAFgBAgEDAQQHdW5pNTM1QQd1bmk3Njg0B3VuaTVCQTI=) format("truetype");    
    font-style: normal;    
    font-weight: normal;
}

使用 woff 字体

如果使用 Gulp 压缩字体,网站加载速度没有提高太多,可以使用 woff 字体。

什么是 woff 字体?

WOFF 全称为 Web Open Font Format,译作 Web 开放字体格式。是一种网页所采用的字体格式标准。此字体格式发展于 2009 年,现在正由万维网联盟的Web字体工作小组标准化。此字体格式能够有效利用压缩来减少字体大小。WOFF 字体文件一般比 TTF 字体文件小 40%

2018 年,W3C 正式发布 WOFF2。顾名思义,即是 WOFF 2.0。该标准显著提高了压缩效率(比 WOFF 还要小 30%),降低了对网络带宽的使用,同时实现了在移动设备上对字体数据的快速解压缩。

经测试,ttf → woff,缩小 40% 左右;ttf → woff2,缩小 60% 左右。

支持 ttf、otf 格式。只能转换成 woff 格式。

支持 ttf、otf 格式。可以转换成 woff 和 woff2 格式。

参考文章

图片处理

在处理我们博客内的图片前,我们需要了解常见的图片格式,以便我们更好地处理图片。

综上,我建议图片格式最好为 png 或者 webp

图像压缩

支持 PNG/JPG 格式。最多上传 30 个文件,单个图片最大为 25MB。主用。

压缩 GIF 动图,最多上传 30 个文件,单个图片最大为 25 M。

支持 JPG/JPEG 格式。无图像尺寸、图像数量、文件大小限制。

英文网站,支持常见的图像格式。压缩比高。

无损压缩。最多 20 张图片,每张图片最大 5MB。

图片转 webp 格式

转换后图片较小,转换速度快,可调节转换尺寸、质量。单个图片最大为 5MB。推荐

可以自由使用,完全没有限制。图片大小、数量没有限制。转换速度极快。推荐

英文网站,支持常见的图像格式。可调节图像质量。压缩比高。

支持常见图像格式。可调节图像质量。最多上传 1000 个文件,单个图片最大为 20MB。推荐

智能压缩,转换速度较快,支持 GIF 转 WebP。只能一张一张转换。

如果转换的 webp 图片还不够小,可以使用 TinyPNG 再次压缩。

另外推荐几个图像放大网站