[{"data":1,"prerenderedAt":67},["ShallowReactive",2],{"article-75":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":16,"status":11,"is_open":11,"is_deleted":14,"is_top":14,"is_recommend":14,"create_time":17,"update_time":18,"image_id":19,"url":13,"member_id":14,"cate_name":20,"prev":21,"next":24,"tags":27,"words":37,"read_time":38,"comments":39,"cover":40,"relevant":41},75,"Hexo-SEO优化开启静态文件压缩功能","Hexo,SEO","个人对HEXO搭建博客的SEO优化方案进行总结，从本地的文章结构到定期推送，再到SEO关键词优化做一个全面体系的汇总，如果有更好的方法可以私聊我。\n\n",1,"个人对HEXO搭建博客的SEO优化方案进行总结，从本地的文章结构到定期推送，再到SEO关键词优化做一个全面体系的汇总，如果有更好的方法可以私聊我。\n###### 安装必要的库\n\n```bash\nnpm install gulp -g\nnpm install gulp-minify-css gulp-uglify gulp-htmlmin gulp-htmlclean gulp --save\nnpm install gulp-concat\nnpm install gulp-imagemin\n```\n###### 配置\n在hexo项目的根目录下新建`gulpfile.js`\n\n内容如下：\n\n```javascript\nvar gulp = require('gulp'),\n    uglify = require('gulp-uglify'),\n    cssmin = require('gulp-minify-css'),\n    imagemin = require('gulp-imagemin'),\n    htmlmin = require('gulp-htmlmin'),\n    htmlclean = require('gulp-htmlclean');\n    concat = require('gulp-concat');\n\u002F\u002FJS压缩\ngulp.task('uglify', function() {\n    return gulp.src(['.\u002Fpublic\u002Fjs\u002F**\u002F.js','!.\u002Fpublic\u002Fjs\u002F**\u002F*min.js'])\u002F\u002F只是排除min.js文件还是不严谨，一般不会有问题，根据自己博客的修改我的修改为return gulp.src(['.\u002Fpublic\u002F**\u002F*.js','!.\u002Fpublic\u002Fzuoxi\u002F**\u002F*.js',,'!.\u002Fpublic\u002Fradio\u002F**\u002F*.js'])\n        .pipe(uglify())\n        .pipe(gulp.dest('.\u002Fpublic\u002Fjs'));\u002F\u002F对应修改为.\u002Fpublic即可\n});\n\u002F\u002Fpublic-fancybox-js压缩\ngulp.task('fancybox:js', function() {\n    return gulp.src('.\u002Fpublic\u002Fvendors\u002Ffancybox\u002Fsource\u002Fjquery.fancybox.js')\n        .pipe(uglify())\n        .pipe(gulp.dest('.\u002Fpublic\u002Fvendors\u002Ffancybox\u002Fsource\u002F'));\n});\n\u002F\u002F 合并 JS\ngulp.task('jsall', function () {\n    return gulp.src('.\u002Fpublic\u002F**\u002F*.js')\n    \u002F\u002F 压缩后重命名\n        .pipe(concat('app.js'))\n        .pipe(gulp.dest('.\u002Fpublic'));\n});\n\u002F\u002Fpublic-fancybox-css压缩\ngulp.task('fancybox:css', function() {\n    return gulp.src('.\u002Fpublic\u002Fvendors\u002Ffancybox\u002Fsource\u002Fjquery.fancybox.css')\n        .pipe(cssmin())\n        .pipe(gulp.dest('.\u002Fpublic\u002Fvendors\u002Ffancybox\u002Fsource\u002F'));\n});\n\u002F\u002FCSS压缩\ngulp.task('cssmin', function() {\n    return gulp.src(['.\u002Fpublic\u002Fcss\u002Fmain.css','!.\u002Fpublic\u002Fcss\u002F*min.css'])   \n        .pipe(cssmin())\n        .pipe(gulp.dest('.\u002Fpublic\u002Fcss\u002F'));\n});\n\u002F\u002F图片压缩\ngulp.task('images', function() {\n    gulp.src('.\u002Fpublic\u002Fimages\u002F*.*')\n        .pipe(imagemin({\n            progressive: false\n        }))\n        .pipe(gulp.dest('.\u002Fpublic\u002Fimages\u002F'));\n});\n\u002F\u002F 压缩 public 目录 html文件 public\u002F**\u002F*.hmtl 表示public下所有文件夹中html，包括当前目录\n\ngulp.task('testHtmlmin', function () {\n    var options = {\n        removeComments: true,\u002F\u002F清除HTML注释\n        collapseWhitespace: true,\u002F\u002F压缩HTML\n        collapseBooleanAttributes: true,\u002F\u002F省略布尔属性的值 \u003Cinput checked=\"true\"\u002F> ==> \u003Cinput \u002F>\n        removeEmptyAttributes: true,\u002F\u002F删除所有空格作属性值 \u003Cinput id=\"\" \u002F> ==> \u003Cinput \u002F>\n        removeScriptTypeAttributes: true,\u002F\u002F删除\u003Cscript>的type=\"text\u002Fjavascript\"\n        removeStyleLinkTypeAttributes: true,\u002F\u002F删除\u003Cstyle>和\u003Clink>的type=\"text\u002Fcss\"\n        minifyJS: true,\u002F\u002F压缩页面JS\n        minifyCSS: true\u002F\u002F压缩页面CSS\n    };\n    gulp.src('.\u002Fpublic\u002F**\u002F*.html')\n        .pipe(htmlmin(options))\n        .pipe(gulp.dest('.\u002Fpublic'));\n});\ngulp.task('build', ['uglify', 'cssmin',  'jsall', 'testHtmlmin']);\n\n\u002F\u002F, 'minify-html'\n```\n\n压缩目录根据自己的需求修改\n\n###### 执行压缩\n\n```bash\ngulp build\n```",null,0,593,"","2019-12-30 21:34:32","2026-04-19 15:09:02",133,"技术杂谈",{"id":22,"title":23},74,"超过经理收入的员工",{"id":25,"title":26},76,"Nginx配置优化",[28,31,34],{"id":29,"name":30},32,"web",{"id":32,"name":33},68,"Hexo",{"id":35,"name":36},42,"前端",1719,4,2,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002Fbe\u002F7eb81eb8c1826e0eb5671b64818cf3.jpg",[42,47,52,57,62],{"id":43,"title":44,"create_time":45,"description":46},89,"获取腾讯“邮我”的链接","2020-06-16 10:47:34","腾讯QQ邮箱提供了“邮我”组件，可以放在自己的网站上，让别人点击提供的图片或者链接就可以发Email过来，该文章分享的是如何获取到其中的链接。",{"id":48,"title":49,"create_time":50,"description":51},98,"本站点JavaScript相关特效使用方法整理","2021-04-22 18:38:53","本站的页面用的特效有，粒子线canvas-nest，动态彩带canvas-ribbon，鼠标点击特效以及音乐播放器，本文整理了特效的使用方法",{"id":53,"title":54,"create_time":55,"description":56},106,"阿里开源数据同步组件Canal","2023-10-26 22:43:32","最开始听说canal是从mysql与redis双写一致性解决方案，当时并没有太在意，最近由于需要实时同步数据，如果在代码对insert\u002Fupdate\u002Fdelete做拦截也可以实现，但对代码侵入性太大了，并且后期更改时容易有遗漏，风险太高，这时就又想到了canal，canal的好处在于对业务代码没有侵入，因为是基于监听binlog日志去进行同步数据，这个真的是太爽爽爽了。并且实时性也能做到准实时，这也是canal为什么这么流行，因为确实很多企业会用来做数据同步的方案。",{"id":58,"title":59,"create_time":60,"description":61},62,"内网使用Composer","2019-10-08 23:29:23","最近本地部署Laravel开发环境时，遇到公司的内网无法正常使用Composer下载Laravel，后来发现是要设置公司内网代理",{"id":63,"title":64,"create_time":65,"description":66},49,"了解域名SSL证书申请安装","2019-03-22 17:17:43","如何将自己的网站的访问协议http转成https协议，就得要求我们必须对域名进行SSl证书申请并应用。",1783431660615]