gulp压缩
下载插件
下载gulp-cli
:
npm install gulp-cli -g --save
接着,确认一下版本:
$ gulp -v
CLI version: 2.3.0
Local version: 4.0.2
算了,你什么也没看见
压缩 html
任选其一:
npm install gulp-htmlmin --save
npm install gulp-htmlclean --save
gulp-htmlmin
的配置:
.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
}))
gulp-htmlclean
的配置:
.pipe(htmlclean({
protect: /<\!--%fooTemplate\b.*?%-->/g,
edit: function(html) { return html.replace(/\begg(s?)\b/ig, 'omelet$1'); }
}))
压缩 css
任选其一:
npm install gulp-clean-css --save
gulp-clean-css
的配置:
gulp.task('minify-css', () => {
return gulp.src('./public/**/*.css')
.pipe(cleanCSS())
.pipe(gulp.dest('./public'))
})
压缩 js
任选其一:
重要:gulp-babel
、gulp-uglify
搭配食用!
npm install gulp-tester --save
npm install gulp-babel --save && npm install gulp-uglify --save
gulp-tester
的配置:
不好意思,terser
配置没写,,哈哈哈哈。
.pipe(terser())
gulp-babel
+gulp-uglify
的配置:
.pipe(babel({presets: ['@babel/preset-env']}))
.pipe(uglify().on('error', function (e) {console.log(e)}))
压缩 image
npm install gulp-imagemin --save
gulp-imagemin
的配置:
.pipe(imagemin({
optimizationLevel: 5, // 類型:Number 預設:3 取值範圍:0-7(優化等級)
progressive: true, 7// 類型:Boolean 預設:false 無失真壓縮jpg圖片
interlaced: false, // 類型:Boolean 預設:false 隔行掃描gif進行渲染
multipass: false // 類型:Boolean 預設:false 多次優化svg直到完全優化
}))
gulpflie
在你的博客根目录创建一个gulpfile.js
的文件,格式如下:
并且根据你自己的插件安装情况,来进行配置:Gulpfile.js
:
/* Gulp 压缩 */
// gulp-cli
const gulp = require('gulp')
/* html */
/* 如果是使用 htmlclean,请注释掉下面一行 */
const htmlmin = require('gulp-html-minifier-terser')
/* 同理 */
//const htmlclean = require('gulp-htmlclean')
/* css */
const cleanCSS = require('gulp-clean-css')
/* js */
/* gulp-tester (如果使用 gulp-terser,把下面的//去掉) */
//const terser = require('gulp-terser');
/* babel (如果使用babel,把下面兩行註釋去掉) */
/* 重要:gulp-uglify + gulp-babel */
const uglify = require('gulp-uglify')
const babel = require('gulp-babel')
/* image */
const imagemin = require('gulp-imagemin')
/* 压缩 */
// ---------------
// 壓縮 html
gulp.task('minify-html', () => {
return gulp.src('./public/**/*.html', './public/**/**/*.html', './public/*.html')
// 如果使用的是 htmlclean,则保留如下。
/*.pipe(htmlclean({
protect: /<\!--%fooTemplate\b.*?%-->/g,
edit: function(html) { return html.replace(/\begg(s?)\b/ig, 'omelet$1'); }
}))*/
// 如果使用的是 htmlmin,则保留如下。
.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'))
})
/* 压缩 css */
gulp.task('minify-css', () => {
return gulp.src('./public/**/*.css', './public/mysource/**/*.css')
.pipe(cleanCSS())
.pipe(gulp.dest('./public'))
})
/* 压缩 js */
// minify js - gulp-tester (如果使用 gulp-terser,把注释//去掉)
/* 重要:gulp-uglify + gulp-babel */
//gulp.task('compress', () =>
// gulp.src(['./public/**/*.js', '!./public/**/*.min.js'])
// .pipe(terser())
// .pipe(gulp.dest('./public'))
//)
// minify js - babel( 如果不是使用babel,把下面註釋掉)
gulp.task('compress', () =>
gulp.src(['./public/**/*.js', '!./public/**/*.min.js', './public/mysource/**/*.js', './public/*.js'])
.pipe(babel({
presets: ['@babel/preset-env']
}))
.pipe(uglify().on('error', function (e) {
console.log(e)
}))
.pipe(gulp.dest('./public'))
)
/* 压缩 image */
// 壓縮 public/uploads 目錄內圖片
gulp.task('minify-images', async () => {
gulp.src('./public/img/**/*.*', './public/mysource/image/*.*')
.pipe(imagemin({
optimizationLevel: 5, // 類型:Number 預設:3 取值範圍:0-7(優化等級)
progressive: true, 7// 類型:Boolean 預設:false 無失真壓縮jpg圖片
interlaced: false, // 類型:Boolean 預設:false 隔行掃描gif進行渲染
multipass: false // 類型:Boolean 預設:false 多次優化svg直到完全優化
}))
.pipe(gulp.dest('./public/img'))
})
// 執行 gulp 命令時執行的任務
gulp.task('default', gulp.parallel(
'compress', 'minify-css', 'minify-html', 'minify-images'
))
部署
既然配置都设置好了!接下来就是真材实料的压缩了!
在hexo g
之后,hexo d
之前,加一句命令行gulp
即可。
hexo cl && hexo g && gulp && hexo d