使用gulp压缩博客静态资源

🎨前言

gulp可以自动压缩资源,配合插件能够压缩css、js、html和各种格式的图片文件。(图片压缩只能节省几十K,使用Tinypng效果更好些

🎨安装

  • 博客根目录打开终端运行

    1
    2
    npm install --global gulp-cli #全局安装gulp指令集
    npm install gulp --save #安装gulp插件
  • 安装各类下属插件

    • HTML

      1
      2
      3
      npm install gulp-htmlclean --save-dev
      npm install gulp-html-minifier-terser --save-dev
      # 用gulp-html-minifier-terser可以压缩HTML中的ES6语法
    • CSS

      1
      npm install gulp-clean-css --save-dev
    • JS

      1
      npm install gulp-terser --save-dev
    • 字体包

      📢 font-min仅支持压缩ttf格式的字体包

    1
    npm install gulp-fontmin --save-dev
  • 在博客根目录新建gulpfile.js,粘贴如下代码

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    //用到的各个插件
    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', async() =>{
    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/fontsdest/')) //压缩后的输出目录
    .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'
    ))
  • 运行hexo命令

    1
    2
    3
    4
    hexo clean
    hexo generate
    gulp
    hexo server 或 hexo deploy

教程来自Akilar

使用gulp压缩博客静态资源(使用gulp压缩博客静态资源 | Akilarの糖果屋)