Hexo 使用gulp插件对静态资源优化

关于gulp

gulp 的官方定义非常简洁:基于文件流的构建系统。

#说人话系列#:gulp 是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成。

gulp是一个基于Node.js的自动化构建工具,我们可以通过一些gulp插件实现对html,css,js等静态资源的高效压缩。

安装 gulp 及相关插件

主要安装以下几个:

1. 安装gulp

首先在hexo安装目录下安装gulp

1
$ npm install gulp -g

2. 安装gulp相关插件

1
2
3
4
5
$ npm install gulp-minify-css --save ## or gulp-clean-css
$ npm install gulp-uglify --save
$ npm install gulp-htmlmin --save
$ npm install gulp-htmlclean --save
$ npm install gulp-imagemin --save

安装完成后打开 hexo 目录下的 package.json 文件,查看是否安装了上述插件,比如我的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"hexo": {
"version": "3.3.7"
},
"dependencies": {
"aplayer": "^1.6.0",
"dplayer": "^1.4.2",
"gulp-htmlclean": "^2.7.14",
"gulp-htmlmin": "^3.0.0",
"gulp-imagemin": "^3.3.0",
"gulp-minify-css": "^1.2.4",
"gulp-uglify": "^3.0.0",
"hexo": "^3.2.0",
"hexo-deployer-git": "^0.3.0",
"hexo-generator-archive": "^0.1.4",
"hexo-generator-baidu-sitemap": "^0.1.2",
"hexo-generator-category": "^0.1.3",
"hexo-generator-index": "^0.2.0",
"hexo-generator-search": "^2.1.1",
"hexo-generator-sitemap": "^1.2.0",
"hexo-generator-tag": "^0.2.0",
"hexo-renderer-ejs": "^0.2.0",
"hexo-renderer-markdown-it": "^3.4.1",
"hexo-renderer-stylus": "^0.3.1",
"hexo-server": "^0.2.0",
"markdown-it-emoji": "^1.4.0"
}
}

编写 gulpfile.js

hexo 同级目录下新建文件 gulpfile.js,编辑内容如下,适当修改路径。

比如图片等附件我自己新建了imges目录。

其余的插件设置已经在注释中,所有使用说明来自 一点 博客的构建工具分类下文章。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
var gulp = require('gulp');
var minifycss = require('gulp-minify-css');
//minifycss = require('gulp-clean-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');
var imagemin = require('gulp-imagemin');
// 压缩public 目录内css文件
gulp.task('minify-css', function() {
return gulp.src('./public/**/*.css')
.pipe(minifycss())
.pipe(gulp.dest('./public'));
});
// 压缩public目录内html文件
gulp.task('minify-html', function() {
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,
}))
.pipe(gulp.dest('./public'))
});
// 压缩public目录内js文件
gulp.task('minify-js', function() {
return gulp.src('./public/**/*.js')
.pipe(uglify())
.pipe(gulp.dest('./public'));
});
// 压缩 public 目录内图片
gulp.task('minify-images', function() {
gulp.src('./public/imges/blog/**/*.*')
.pipe(imagemin({
optimizationLevel: 5, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: false, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: false, //类型:Boolean 默认:false 多次优化svg直到完全优化
}))
.pipe(gulp.dest('./public/imges/blog'));
});
// 默认任务
gulp.task('default', [
'minify-html','minify-css','minify-js','minify-images'
]);

到这里对gulp的配置就完成了,只需要每次在执行generate命令后执行gulp就可以实现对静态资源的压缩,压缩完成后执行deploy命令同步到服务器。

命令执行

1
2
3
4
# $ hexo clean #删除public文件和database
$ hexo generate ## hexo g
$ gulp
$ hexo deploy ## hexo d

运行命令部分截图

hexo-clean

gulp

运行效果比对

截取了整个 public 目录 压缩前后大小变化图。

old-public

new-public

相关链接

文章目录
  1. 1. 关于gulp
  2. 2. 安装 gulp 及相关插件
  3. 3. 编写 gulpfile.js
  4. 4. 命令执行
  5. 5. 相关链接
|