本篇文章给大家谈谈如何网站源码分享搭建,以及有网站源码如何搭建自己的网站对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
个人博客网站搭建完全教程(看这篇就够了)
阅读须知
注意,这篇文章篇幅较长,主要针对新手,每一步很详细,所以可能会显得比较啰嗦,建议基础比较好小伙伴根据右侧目录选择自己感兴趣的部分跳着看,不要文章没看,上来先喷一下!谢谢(⊙o⊙)。教程内容随意复制使用,引用的话请加一个参考链接,谢谢!
博客开源
倒腾了一两周总算把个人博客网站完善了,目前这个版本使用应该是够了,当然还有一些优化项和功能增加后续在慢慢更新,为了回馈开源,今天准备把我自己修改完善的blog网站源代码开源。这不是生成后的网页文件,是您可以直接使用的源码,您只需要把博客相关信息换成您自己的就可以部署了,对于新手或者不懂编程的小伙伴来说,简直是福音,极大简化了您构建博客的工作量和复杂度,每个人都可以下载并修改成自己喜欢样式!如果你有修改想法,欢迎PR!最后,我们还是给这个开源小项目取个名字吧,就叫hexo-blog-fly吧,怎么样?<<<<<源代码下载>>>>>
本博客基于Hexo框架搭建,用到hexo-theme-matery主题,并在此基础之上做了很多修改,修复了一些bug,增加了一些新的特性和功能,博客地址:https://shw2018.github.io,博客演示:sunhwee.com。
简单使用方法:
star本项目仓库o安装Git,安装nodeJS你可以直接fork一份源码到你的仓库,clone到本地在本地博客仓库运行npmi命令安装依赖包修改配置信息,改成自己的信息运行命令hexoclean(清除生成文件),hexog(生成网页),hexos(本地预览),hexod(部署)
更多详情教程,强烈推荐看我写的:Hexo+Github博客搭建完全教程
有什么问题可以在文章最后评论区留言和讨论,当然,欢迎文章最后打赏投币,请博主一杯冰阔乐,笑~
最后,如果项目和教程对你有所帮助或者你看见了还算比较喜欢,欢迎给我github项目仓库点个star,谢谢您!
前言
去年在博客园注册了自己的第一个博客,当时初衷就是想拿来作为自己的在线笔记本,做做学习记录,分享一些学到的东西,使用第三方提供的博客服务其实也挺方便,现在市面上提供类似服务的博客网站也很多,如CSDN,博客园,简书等平台,可以直接在上面发表,用户交互做的好,写的文章百度也能搜索的到。但是缺点是比较不自由,会受到平台的各种限制和恶心的广告,个性化不足。而自己购买域名和服务器,搭建博客的成本实在是太高了,不光是说这些购买成本,单单是花力气去自己搭这么一个网站,还要定期的维护它,对于我们大多数人来说,也是没有这样的精力和时间。那么,我们能不能自己定制一个自己喜欢的个性化博客,同时也不用付出太高的成本啦?
这就引出了第三种选择,基于开源框架搭建博客,然后直接在githubpage平台上托管我们的博客。这样就可以安心的来写作,又不需要定期维护,基于这个想法,今年8月初的时候开始搭建第一个属于自己的独立博客,前后断续弄了近一周,到现在稍微有点模样了。我想可能有很多小伙伴应该也想过搭建一个自己的博客,当然,网上也有一堆详细教程。写这篇博客的目的大概有两个,第一个是当做自己的搭建记录,方便以后自己随时查看提示修改,第二个是稍稍总结一下具体的搭建步骤以及一些支持个性化定制的博客源码修改的教程,稍稍分享一下这些修改经验,当然,更多的一些个性化操作需要你自己以后在这个基础上慢慢去摸索,有些写的不太好的地方还希望看到的小伙伴多多包涵。
博客初步的页面效果可以看一下我的博客:sunhwee.com,欢迎大家支持。
本博客基于Hexo,所以首先要了解一下我们搭建博客所要用到的框架。Hexo是高效的静态网站生成框架,它基于Node.js,快速,简单且功能强大,是搭建博客的首选框架。大家可以进入hexo官网进行详细查看,因为Hexo的创建者是台湾人,对中文的支持很友好,可以选择中文进行查看。通过Hexo,你可以直接使用Markdown语法来撰写博客。相信很多小伙伴写工程都写过README.md文件吧,对,就是这个格式的!写完后只需两三条命令即可将生成的网页上传到github或者coding等代码管理托管平台,然后别人就可以浏览你的博客网页啦。是不是很简单?你无需关心网页源代码的具体生成细节,只需要用心写好你的博客文章内容就行了。
简单总结:Hexo,产品成熟,使用简单,功能强大,有丰富的各种插件资源;但,像发布后台、站内搜索,评论系统类似诉求,虽然有对应的工具,但也需要自己折腾下,后续我们一步一步介绍。
教程大致分三个部分,
第一部分:hexo的初级搭建还有部署到githubpage上,以及个人域名的绑定。第二部分:hexo的基本配置,更换主题,实现多终端工作,以及在codingpage部署实现国内外分流第三部分:hexo添加各种功能,包括搜索的SEO,阅读量统计,访问量统计和评论系统等。
第一部分搭建
hexo的初级搭建还有部署到githubpage上,以及个人域名的绑定。
Hexo搭建步骤
1.安装Git2.安装Node.js3.安装Hexo4.GitHub创建个人仓库5.生成SSH添加到GitHub6.将hexo部署到GitHub7.设置个人域名8.发布文章
1.安装Git
为了把本地的网页文件上传到github上面去,需要用到工具———Git[下载地址]。Git是目前世界上最先进的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git非常强大,建议每个人都去了解一下。廖雪峰老师的Git教程写的非常好,大家可以看一下。Git教程
windows:到git官网上下载.exe文件,Downloadgit,安装选项还是全部默认,只不过最后一步添加路径时选择UseGitfromtheWindowsCommandPrompt,这样我们就可以直接在命令提示符里打开git了。
顺便说一下,windows在git安装完后,就可以直接使用gitbash来敲命令行了,不用自带的cmd,cmd有点难用。
linux:对linux来说实在是太简单了,因为最早的git就是在linux上编写的,只需要一行代码
sudoapt-getinstallgit\n
安装完成后在命令提示符中输入git–version来查看一下版本验证是否安装成功。
2.安装nodejs
Hexo是基于node.js编写的,所以需要安装一下node.js和里面的npm工具。
windows:下载稳定版或者最新版都可以Node.js,安装选项全部默认,一路点击Next。最后安装好之后,按Win+R打开命令提示符,输入node-v和npm-v,如果出现版本号,那么就安装成功了。
linux:命令行安装:
sudoapt-getinstallnodejs\nsudoapt-getinstallnpm\n
不过不推荐命令行安装,有时候有问题,建议直接到官网去下载编译好的压缩文件,如下所示:
然后解压到你指定的文件夹即可,比如我解压到我系统的/home/shw/MySoftwares目录下了,如图:
注意本压缩包是.tar.xz格式的,需要两次解压
配置一下环境变量
sudovim/etc/profile\n
复制下面两行到刚打开的profile文件最底部(注意node的安装地址/home/shw/MySoftwares/node-v12.8.0-linux-x64换成自己的):
exportNODE_HOME=/home/shw/MySoftwares/node-v12.8.0-linux-x64\nexportPATH=$PATH:$NODE_HOME/bin\n
保存后退出,再执行下面命令将环境变量生效:
source/etc/profile\n
将目录软链接到全局环境下(命令后面的/usr/local/bin/node是固定的)
sudoln-s/home/shw/MySoftwares/node-v12.8.0-linux-x64/node/usr/local/bin/node\nsudoln-s/home/shw/MySoftwares/node-v12.8.0-linux-x64/npm/usr/local/bin/npm\n
这样安装好了以后使用npm安装的包(比如:ionicserve),使用包的命令时可能会提示找不到命令,没关系,在用户目录下终端执行下面命令(固定写法):
echo-e&34;>>~/.bashrc&&source~/.bashrc\n
这样我们在所有用户下,都可以使用npm,也可以使用npm安装的包的命令。成功地将nodejs安装并配置到全局环境下。
安装完后,打开命令行终端,输入:
node-v\nnpm-v\n
检查一下有没有安装成功
添加国内镜像源
如果没有梯子的话,可以使用阿里的国内镜像进行加速。
npmconfigsetregistryhttps://registry.npm.taobao.org\n
3.安装Hexo
前面git和nodejs安装好后,就可以安装hexo了,你可以先创建一个文件夹MyBlog,用来存放自己的博客文件,然后cd到这个文件夹下(或者在这个文件夹下直接右键gitbash打开)。
比如我的博客文件都存放在D:\\Study\\MyBlog目录下。
在该目录下右键点击GitBashHere,打开git的控制台窗口,以后我们所有的操作都在git控制台进行,就不用Windows自带的cmd了。
定位到该目录下,输入npminstall-ghexo-cli安装Hexo。可能会有几个报错,无视它就行。
npminstall-ghexo-cli\n
安装完后输入hexo-v验证是否安装成功。
至此hexo就安装完了。
接下来初始化一下hexo,即初始化我们的网站,输入hexoinit初始化文件夹
hexoinitMyBlog\n
这个MyBlog可以自己取什么名字都行,然后,接着输入npminstall安装必备的组件。
cdMyBlog//进入这个MyBlog文件夹\nnpminstall\n
新建完成后,指定文件夹MyBlog目录下载:
node_modules:依赖包public:存放生成的页面scaffolds:生成文章的一些模板source:用来存放你的文章themes:主题**_config.yml:博客的配置文件**
这样本地的网站配置也弄好了,输入hexog生成静态网页,然后输入hexos打开本地服务器,
hexog\nhexoserver(或者简写:hexos))\n
然后浏览器打开http://localhost:4000/,就可以看到我们的博客啦,效果如下:
按ctrl+c关闭本地服务器。
4.注册Github账号创建个人仓库
接下来就去注册一个github账号,用来存放我们的网站。大多数小伙伴应该都有了吧,作为一个合格的程序猿(媛)还是要有一个的。
打开https://github.com/,新建一个项目仓库Newrepository,如下所示:
然后如下图所示,输入自己的项目名字,后面一定要加.github.io后缀,README初始化也要勾上。
要创建一个和你用户名相同的仓库,后面加.http://github.io,只有这样,将来要部署到GitHubpage的时候,才会被识别,也就是http://xxxx.github.io,其中xxx就是你注册GitHub的用户名。例如我的:http://shw2018.github.io
5.生成SSH添加到GitHub
生成SSH添加到GitHub,连接Github与本地。右键打开gitbash,然后输入下面命令:
gitconfig–globaluser.name&34;\ngitconfig–globaluser.email&34;\n
这里的yourname输入你的GitHub用户名,youremail输入你GitHub的邮箱。这样GitHub才能知道你是不是对应它的账户。例如我的:
gitconfig–globaluser.name&34;\ngitconfig–globaluser.email&34;\n
可以用以下两条,检查一下你有没有输对
gitconfiguser.name\ngitconfiguser.email\n
然后创建SSH,一路回车
ssh,简单来讲,就是一个秘钥,其中,id_rsa是你这台电脑的私人秘钥,不能给别人看的,id_rsa.pub是公共秘钥,可以随便给别人看。把这个公钥放在GitHub上,这样当你链接GitHub自己的账户时,它就会根据公钥匹配你的私钥,当能够相互匹配时,才能够顺利的通过git上传你的文件到GitHub上。
ssh-keygen-trsa-C&34;\n
这个时候它会告诉你已经生成了.ssh的文件夹。在你的电脑中找到这个文件夹。或者gitbash中输入
cat~/.ssh/id_rsa.pub\n
将输出的内容复制到框中,点击确定保存。
打开github,在头像下面点击settings,再点击SSHandGPGkeys,新建一个SSH,名字随便取一个都可以,把你的id_rsa.pub里面的信息复制进去。如图:
在gitbash输入ssh-Tgit@github.com,如果如下图所示,出现你的用户名,那就成功了。
6.将hexo部署到GitHub
这一步,我们就可以将hexo和GitHub关联起来,也就是将hexo生成的文章部署到GitHub上,打开博客根目录下的_config.yml文件,这是博客的配置文件,在这里你可以修改与博客配置相关的各种信息。
修改最后一行的配置:
deploy:\ntype:git\nrepository:https://github.com/shw2018/shw2018.github.io\nbranch:master\n
repository修改为你自己的github项目地址即可,就是部署时,告诉工具,将生成网页通过git方式上传到你对应的链接仓库中。
这个时候需要先安装deploy-git,也就是部署的命令,这样你才能用命令部署到GitHub。
npminstallhexo-deployer-git–save\n
然后
hexoclean\nhexogenerate\nhexodeploy\n
其中hexoclean清除了你之前生成的东西,也可以不加。hexogenerate顾名思义,生成静态文章,可以用hexog缩写,hexodeploy部署文章,可以用hexod缩写
注意deploy时可能要你输入username和password。
得到下图就说明部署成功了,过一会儿就可以在http://yourname.github.io这个网站看到你的博客了!!
7.设置个人域名
现在你的个人网站的地址是yourname.github.io,如果觉得这个网址逼格不太够,这就需要你设置个人域名了。但是需要花钱。
不过,这一步不是必要的,如果目前还不想买域名可以先跳过,继续看后面的,以后想买域名了在还看这块
首先你得购买一个专属域名,xx云都能买,看你个人喜好了。
这篇以腾讯云为例,腾讯云官网购买:
然后实名认证后进入腾讯云控制台,点云解析进去,找到你刚买的域名,点进去添加两条解析记录,如下图所示:
然后打开你的github博客项目,点击settings,拉到下面Customdomain处,填上你自己的域名,保存:
这时候你的项目根目录应该会出现一个名为CNAME的文件了。如果没有的话,打开你本地博客/source目录,我的是D:\\Study\\MyBlog\\source,新建CNAME文件,注意没有后缀。然后在里面写上你的域名,保存。最后运行hexog、hexod上传到github。
过不了多久,再打开你的浏览器,输入你自己的专属域名,就可以看到搭建的网站啦!
8.写文章、发布文章
首先在博客根目录下右键打开gitbash,安装一个扩展npmihexo-deployer-git。
然后输入hexonewpost&34;,新建一篇文章。
然后打开D:\\Study\\MyBlog\\source\\_posts的目录,可以发现下面多了一个文件夹和一个.md文件,一个用来存放你的图片等数据,另一个就是你的文章文件啦。你可以会直接在vscode里面编写markdown文件,可以实时预览,也可以用用其他编辑md文件的软件的工具编写。编写完markdown文件后,根目录下输入hexog生成静态网页,然后输入hexos可以本地预览效果,最后输入hexod上传到github上。这时打开你的github.io主页就能看到发布的文章啦。
到这儿基本第一部分就完成了,已经完整搭建起一个比较简陋的个人博客了,接下来我们就可以对我们的博客进行个性化定制了。
第二部分定制
我们要定制自己的博客的话,首先就要来了解一下Hexo博客的一些目录和文件的作用,以及如何平滑更换漂亮的主题模板并加入自己的定制源代码实现个性化定制
1.Hexo相关目录文件
1.1博客目录构成介绍
从上图可以看出,博客的目录结构如下:
-node_modules\n-public\n-scaffolds\n-source\n-_data\n\t-_posts\n\t-about\n\t-archives\n-categories\n-friends\n\t-tags\n-themes\n
node_modules是node.js各种库的目录,public是生成的网页文件目录,scaffolds里面就三个文件,存储着新文章和新页面的初始设置,source是我们最常用到的一个目录,里面存放着文章、各类页面、图像等文件,themes存放着主题文件,一般也用不到。
我们平时写文章只需要关注source/_posts这个文件夹就行了。
1.2hexo基本配置
在文件根目录下的_config.yml,就是整个hexo框架的配置文件了。可以在里面修改大部分的配置。详细可参考官方的配置描述。
1.2.1网站
参数描述title网站标题subtitle网站副标题description网站描述author您的名字language网站使用的语言timezone网站时区。Hexo默认使用您电脑的时区。时区列表。比如说:America/New_York,Japan,和UTC。
其中,description主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词。author参数用于主题显示文章的作者。
1.2.2网址
参数描述url网址root网站根目录permalink文章的永久链接格式permalink_defaults永久链接中各部分的默认值
在这里,你需要把url改成你的网站域名。
permalink,也就是你生成某个文章时的那个链接格式。
比如我新建一个文章叫temp.md,那么这个时候他自动生成的地址就是http://yoursite.com/2018/09/05/temp。
以下是官方给出的示例,关于链接的变量还有很多,需要的可以去官网上查找永久链接。
参数结果:year/:month/:day/:title/2019/08/10/hello-world:year-:month-:day-:title.html2019-08-10-hello-world.html:category/:titlefoo/bar/hello-world
再往下翻,中间这些都默认就好了。
theme:landscap\n
theme就是选择什么主题,也就是在themes这个文件夹下,在官网上有很多个主题,默认给你安装的是lanscape这个主题。当你需要更换主题时,在官网上下载,把主题的文件放在themes文件夹下,再修改这个主题参数就可以了。
1.2.3Front-matter
Front-matter是md文件最上方以—分隔的区域,用于指定个别文件的变量,举例来说:
title:Hexo+Github博客搭建记录\ndate:2019-08-1021:44:44\n
下是预先定义的参数,您可在模板中使用这些参数值并加以利用。
参数描述layout布局title标题date建立日期updated更新日期comments开启文章的评论功能tags标签(不适用于分页)categories分类(不适用于分页)permalink覆盖文章网址
其中,分类和标签需要区别一下,分类具有顺序性和层次性,也就是说Foo,Bar不等于Bar,Foo;而标签没有顺序和层次。
—\ntitle:Hexo+Github博客搭建记录\ndate:2019-08-1021:44:44\nauthor:洪卫\nimg:/medias/banner/7.jpg\ncoverImg:/medias/banner/7.jpg\ntop:true\ncover:true\ntoc:true\npassword:5f15b28ffe43f8be4f239bdd9b69af9d80dbafcb20a5f0df5d1677a120ae9110\nmathjax:true\nsummary:这是你自定义的文章摘要内容,如果这个属性有值,文章卡片摘要就显示这段文字,否则程序会自动截取文章的部分内容作为摘要\ntags:\n-Hexo\n-Github\n-博客\ncategories:\n-软件安装与配置\n—\n
1.2.4layout(布局)
1.2.4.1post
当你每一次使用代码
hexonewXXX\n
它其实默认使用的是post这个布局,也就是在source文件夹下的_post里面。
Hexo有三种默认布局:post、page和draft,它们分别对应不同的路径,而您自定义的其他布局和post相同,都将储存到source/_posts文件夹。
而new这个命令其实是:
hexonew[layout]<title>\n
只不过这个layout默认是post罢了。
1.2.4.2page
如果你想另起一页,那么可以使用
hexonewpagenewpage\n
系统会自动给你在source文件夹下创建一个newpage文件夹,以及newpage文件夹中的index.md,这样你访问的newpage对应的链接就是http://xxx.xxx/newpage
1.2.4.3draft
draft是草稿的意思,也就是你如果想写文章,又不希望被看到,那么可以
hexonewdraftnewdraft\n
这样会在source/_draft中新建一个newdraft.md文件,如果你的草稿文件写的过程中,想要预览一下,那么可以使用
hexoserver–draft\n
在本地端口中开启服务预览。
如果你的草稿文件写完了,想要发表到post中,
hexopublishdraftnewdraft\n
就会自动把newdraft.md发送到post中。
2.更换主题
我们在了解Hexo博客文件基础之后,知道主题文件就放在themes文件下,那么我们就可以去Hexo官网下载喜欢的主题,复制进去然后修改参数即可。网上大多数主题都是github排名第一的Next主题,但是我个人不是很喜欢,我在网上看到一个主题感觉还不错:hexo-theme-matery,地址在传送门。这个主题看着比较漂亮,并且响应式比较友好,点起来很舒服,功能也比较很多。
当然,人各有异,这个主题风格也不一定是你喜欢,那么你也可以跟着这教程类似的方法替换成你喜欢的就行了。
特性:
简单漂亮,文章内容美观易读MaterialDesign设计响应式设计,博客在桌面端、平板、手机等设备上均能很好的展现首页轮播文章及每天动态切换Banner图片瀑布流式的博客文章列表(文章无特色图片时会有24张漂亮的图片代替)时间轴式的归档页词云的标签页和雷达图的分类页丰富的关于我页面(包括关于我、文章统计图、我的项目、我的技能、相册等)可自定义的数据的友情链接页面支持文章置顶和文章打赏支持MathJaxTOC目录可设置复制文章内容时追加版权信息可设置阅读文章时做密码验证Gitalk、Gitment、Valine和Disqus评论模块(推荐使用Gitalk)集成了不蒜子统计、谷歌分析(GoogleAnalytics)和文章字数统计等功能支持在首页的音乐播放和视频播放功能
他的介绍文档写得非常的详细,还有中英文两个版本。效果图如下:
首先先按照文档教程安装一遍主题,然后是可以正常打开的,如果你是一般使用的话,基本没啥问题了。不过有些地方有些地方可以根据你自己的习惯和喜好修改一下,下面记录一下我这个博客修改了的一些地方。
2.1新建文章模板修改
首先为了新建文章方便,我们可以修改一下文章模板,建议将/scaffolds/post.md修改为如下代码:
—\ntitle:{{title}}\ndate:{{date}}\nauthor:\nimg:\ncoverImg:\ntop:false\ncover:false\ntoc:true\nmathjax:false\npassword:\nsummary:\ntags:\ncategories:\n—\n
这样新建文章后一些Front-matter参数不用你自己补充了,修改对应信息就可以了。
2.2添加404页面
原来的主题没有404页面,我们加一个。首先在/source/目录下新建一个404.md,内容如下:
title:404\ndate:2019-08-516:41:10\ntype:&34;\nlayout:&34;\ndescription:&34;\n
然后在/themes/matery/layout/目录下新建一个404.ejs文件,内容如下:
<styletype=&34;>\n/*don&34;bg-coverpd-headerabout-cover&34;container&34;row&34;cols10offset-s1m8offset-m2l8offset-l2&34;brand&34;titlecenter-align&34;descriptioncenter-align&39;.bg-cover&39;background-image&39;url(/medias/banner/&39;.jpg)&34;card&34;card&34;card-content&34;card-contentarticle-card-content&34;titlecenter-align&34;zoom-in-up&34;fafa-address-book&39;myCV&34;articleContent&34;fade-up&34;text/javascript&34;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default&$+\\-.!_>])/\n
第553行的em:处替换成:
em:/^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/\n
这时在文章里写数学公式基本没有问题了,但是要注意:数学公式中如果出现了连续两个{,中间一定要加空格!
举个例子:行内公式:y=f(x)y=f(x)代码:
$y=f(x)$\n
行间公式:
y=fg1(x)y=fg1(x)
代码:
\\\\[y={f_{{g_1}}}(x)\\\\]\n
注意上面花括号之间有空格!
2.5增加建站时间
修改/themes/matery/layout/_partial中的footer.ejs,在最后加上:
<scriptlanguage=javascript>\nfunctionsiteTime(){\nwindow.setTimeout(&34;,1000);\nvarseconds=1000;\nvarminutes=seconds*60;\nvarhours=minutes*60;\nvardays=hours*24;\nvaryears=days*365;\nvartoday=newDate();\nvartodayYear=today.getFullYear();\nvartodayMonth=today.getMonth()+1;\nvartodayDate=today.getDate();\nvartodayHour=today.getHours();\nvartodayMinute=today.getMinutes();\nvartodaySecond=today.getSeconds();\n/*Date.UTC()–返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)\nyear-作为date对象的年份,为4位年份值\nmonth-0-11之间的整数,做为date对象的月份\nday-1-31之间的整数,做为date对象的天数\nhours-0(午夜24点)-23之间的整数,做为date对象的小时数\nminutes-0-59之间的整数,做为date对象的分钟数\nseconds-0-59之间的整数,做为date对象的秒数\nmicroseconds-0-999之间的整数,做为date对象的毫秒数*/\nvart1=Date.UTC(2017,09,11,00,00,00);//北京时间2018-2-1300:00:00\nvart2=Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond);\nvardiff=t2-t1;\nvardiffYears=Math.floor(diff/years);\nvardiffDays=Math.floor((diff/days)-diffYears*365);\nvardiffHours=Math.floor((diff-(diffYears*365+diffDays)*days)/hours);\nvardiffMinutes=Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes);\nvardiffSeconds=Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds);\ndocument.getElementById(&34;).innerHTML=&34;+diffYears+&34;+diffDays+&34;+diffHours+&34;+diffMinutes+&34;+diffSeconds+&34;;\n}/*因为建站时间还没有一年,就将之注释掉了。需要的可以取消*/\nsiteTime();\n</script>\n
然后在合适的地方(比如copyright声明后面)加上下面的代码就行了:
<spanid=&34;></span>\n
2.6修改不蒜子初始化计数
因为不蒜子至今未开放注册,所以没办法在官网修改初始化,只能自己动手了。和上一条一样,我们在/themes/matery/layout/_partial里的footer.ejs文件最后加上:
<script>\n$(document).ready(function(){\n\nvarint=setInterval(fixCount,50);//50ms周期检测函数\nvarpvcountOffset=80000;//初始化首次数据\nvaruvcountOffset=20000;\n\nfunctionfixCount(){\nif(document.getElementById(&34;).style.display!=&34;){\n$(&busuanzi_value_site_pv&34;34;).html())+pvcountOffset);\nclearInterval(int);\n}\nif($(&busuanzi_container_site_pv&34;display&34;none&34;34;).html(parseInt($(&busuanzi_value_site_uv&34;busuanzi_container_site_pv&34;fafa-heart-o&34;busuanzi_value_site_pv&34;white-color&34;busuanzi_container_site_uv&34;busuanzi_value_site_uv&34;white-color&34;busuanzi_container_site_pv&39;display:none&34;fafa-heart-o&34;busuanzi_value_site_pv&34;white-color&34;busuanzi_container_site_uv&39;display:none&34;busuanzi_value_site_uv&34;white-color&39;display:none&34;busuanzi_container_site_pv&39;display:none&34;fafa-heart-o&34;busuanzi_value_site_pv&34;white-color&34;busuanzi_container_site_uv&39;display:none&34;busuanzi_value_site_uv&34;white-color&34;busuanzi_container_site_pv&39;display:none&34;busuanzi_container_site_uv&39;display:none&34;busuanzi_container_page_pv&34;info-break-policy&34;fafa-eyefa-fw&39;readCount&34;busuanzi_value_page_pv&34;busuanzi_container_site_pv&39;display:none&34;fafa-eyefa-fw&39;readCount&34;busuanzi_value_page_pv&//outchain/2/20707408/然后就转到外链设置页面了。
复制如下代码:
粘贴到文章对应位置就行了,为了美观,设置一下居中,具体代码如下:
<divalign=&34;>这里粘贴刚刚复制的代码</div>\n
2.10博客音乐板块
如果我们自己写博客写疲劳了,想放松一下听听歌又不想切出博客主页,那么我们可以自己定制一个博客音乐播放界面,把自己喜欢的歌曲都放进来,这里用到是Aplayer插件,但是歌曲来源需要我们自己定义,但是,因为各大音乐平台,由于版权原因,很多歌曲是不支持外链播放的,难道我们就必须每首歌下载然后上传云空间,再获取词曲封面么?这就比较麻烦了。其实不然,研究了半个小时,我发现可以采取下面的办法,很方便:
首先我们找到网易云在线平台,任意找到一首歌点进去播放,可以在地址栏拿到音乐ID号然后通过下面网址:http://music.163.com/song/media/outer/url?id=XXXXXX.mp3,XXXXXX就是歌曲ID号,每一首歌我们只需要换掉这个ID号就行了,就相当于每一首的外链了最后封面图也可以按F12去找页面元素的链接,填到对应的musics.jason文件中就可以,批量填入,听到好听的歌曲随时更换随时新增,很方便。
操作如下图:
2.11增加emoji支持
为博客新增对emoji表情的支持,使用到了hexo-filter-github-emojis的Hexo插件来支持emoji表情的生成,把对应的markdownemoji语法(::,例如::smile:)转变成会跳跃的emoji表情,安装命令如下:
npminstallhexo-filter-github-emojis–save\n
在Hexo根目录下的_config.yml文件中,新增以下的配置项:
githubEmojis:\nenable:true\nclassName:github-emoji\ninject:true\nstyles:\ncustomEmojis:\n
执行hexoclean&&hexog重新生成博客文件,然后就可以在文章中对应位置看到你用emoji语法写的表情了。如下图:
2.12Valine评论模块修改
matery主题已经集成Valine评论模块,在主题配置文件.yml中配置相应的字段就行了。enable:true,XXX字段是需要自己注册登录leancloud官网,创建应用然后获取appId和appKey,其他参数根据自己的需求修改就是,如下:
valine:\nenable:true\nappId:XXXXXXXXXXXXXXXXXXXXX\nappKey:XXXXXXXXXXXXXXXXXXXX\nnotify:true\nverify:true\nvisitor:true\navatar:&39;39;justgogo&CommentBoxplaceholder\n\n
注意:Valine用在matery主题上有个bug就是第一条评论位置会错位
如下图:
解决办法:F12开发者模式,控制台定位bug位置,修改参数,调整对应主题源文件参数,得以解决,如下图示:
2.13添加博客动态标签
原理就是给博客增加一个事件判断,如下图所示:
打开博客主题文件夹,路径:themes/matery/layout/layout.ejs,在对应位置添加如下代码:
<scripttype=&34;>\nvarOriginTitile=document.title,\nst;\ndocument.addEventListener(&34;,function(){\ndocument.hidden?(document.title=&34;,clearTimeout(st)):(document.title=\n&34;,st=setTimeout(function(){\ndocument.title=OriginTitile\n},3e3))\n})\n</script>\n
然后hexoclean&&hexog即可。
第三部分优化
hexo添加各种优化功能,比如SEO优化等。待续……
1.网站SEO优化
网站推广是一个比较烦人的事情,特别是对于专心搞技术的来说,可能就不是很擅长,那么怎么才能让别人知道我们网站呢?也就是说我们需要想办法让别人通过搜索就可以搜索到博客的内容,给我们带来自然流量,这就需要seo优化,让我们的站点变得对搜索引擎友好
SEO是由英文SearchEngineOptimization缩写而来,中文意译为“搜索引擎优化”。SEO是指通过站内优化比如网站结构调整、网站内容建设、网站代码优化等以及站外优化。
1.1让百度收录你的站点
首先要做的就是让各大搜索引擎收录你的站点,我们在刚建站的时候各个搜索引擎是没有收录我们网站的,在搜索引擎中输入site:<域名>,如果如下图所示就是说明我们的网站并没有被百度收录。我们可以直接点击下面的“网址提交”来提交我们的网站
1.1.1验证网站所有权
登录百度站长搜索资源平台:http://zhanzhang.baidu.com,只要有百度旗下的账号就可以登录,登录成功之后在站点管理中点击添加网站然后输入你的站点地址。
注意,这里需要输入我们自己购买的域名,不能使用xxx.github.io之类域名.因为github是不允许百度的spider(蜘蛛)爬取github上的内容的,所以如果想让你的站点被百度收录,只能使用自己购买的域名
在填完网址选择完网站的类型之后需要验证网站的所有权,验证网站所有权的方式有三种:
文件验证。html标签验证CNAME解析验证(推荐使用)
其实使用哪一种方式都可以,都是比较简单的。
但是一定要注意,使用文件验证文件存放的位置需要放在sourc文件夹下,如果是html文件那么hexo就会将其编译,所以必须要在html头部加上的layout:false,这样就不会被hexo编译。(如果验证文件是txt格式的就不需要)
其他两种方式也是很简单的,个人推荐文件验证和CNAME验证,CNAME验证最为简单,只需加一条解析就好~
1.1.2生成网站地图
我们需要使用npm自动生成网站的sitemap,然后将生成的sitemap提交到百度和其他搜索引擎
1.1.2.1安装sitemap插件
npminstallhexo-generator-sitemap–save\nnpminstallhexo-generator-baidu-sitemap–save\n
1.1.2.2修改博客配置文件
在根目录配置文件.yml中修改url为你的站点地址
39;http://yoursite.com/child&39;/child/&url:https://shw2018.github.io/\nurl:https://sunhwee.com\nroot:/\npermalink::year/:month/:day/:title/\npermalink_defaults:\n
执行完hexog命令之后就会在网站根目录生成sitemap.xml文件和baidusitemap.xml文件,可以通过:https://sunhwee.com/baidusitemap.xml,查看该文件是否生成,其中sitemap.xml文件是搜索引擎通用的文件,baidusitemap.xml是百度专用的sitemap文件。
1.1.3向百度提交链接
然后我们就可以将我们生成的sitemap文件提交给百度,还是在百度站长平台,找到链接提交,这里我们可以看到有两种提交方式,自动提交和手动提交,自动提交又分为主动推送、自动推送和sitemap
如何选择链接提交方式
主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。自动推送:最为便捷的提交方式,请将自动推送的JS代码部署在站点的每一个页面源代码中,部署代码的页面在每次被浏览时,链接会被自动推送给百度。可以与主动推送配合使用。sitemap:您可以定期将网站链接放到sitemap中,然后将sitemap提交给百度。百度会周期性的抓取检查您提交的sitemap,对其中的链接进行处理,但收录速度慢于主动推送。手动提交:一次性提交链接给百度,可以使用此种方式。
一般主动提交比手动提交效果好,这里介绍主动提交的三种方法
从效率上来说:
主动推送>自动推送>sitemap
1.1.3.1设置主动推送
安装插件hexo-baidu-url-submit
npminstallhexo-baidu-url-submit–save\n
然后再根目录的配置文件中新增字段
baidu_url_submit:\ncount:80在百度站长平台中注册的域名\ntoken:xxxxxxxxxxxxxx文本文档的地址,新链接会保存在此文本文档里\n
再加入新的deploy:
deploy:\n-type:baidu_url_submitter\n
如图所示:
注意,这里多个type的写法应该这么写**,前面那个type是我推送到Github与Coding的page页面的配置,后面再讲这个。
密钥的获取位置在网页抓取中的链接提交这一块,如下所示:
这样执行hexodeploy的时候,新的链接就会被推送了。
推送成功时,会有如下终端提示
在主题配置文件下设置,将baidu_push设置为true:
1.1.3.2设置自动推送
在主题配置文件下设置,将baidu_push设置为true:
39;script&39;:&39;https&39;https://zz.bdstatic.com/linksubmit/push.js&39;http://push.zhanzhang.baidu.com/push.js&34;script&permalink::title/\npermalink:archives/:abbrlink.html\nabbrlink:\nalg:crc32进制:dec(default)andhex\n
运行hexoclean和hexog命令来重新生成文件看看,可以清楚的看到,URL结构成功变为了3层。
1.5其他seo优化
seo优化应该说是一个收益延迟的行为,可能你做的优化短期内看不到什么效果,但是一定要坚持,seo优化也是有很深的可以研究的东西,从我们最初的网站设计,和最基础的标签的选择都有很大的关系,网站设计就如我们刚刚说的,要让用户点击三次可以到达网站的任何一个页面,要增加高质量的外链,增加相关推荐(比如说我们经常见到右侧本站的最高阅读的排名列表),然后就是给每一个页面加上keyword和描述
在代码中,我们应该写出能让浏览器识别的语义化HTML,这样有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;并且对外链设置nofollow标签,避免spider爬着爬着就爬出去了(减少网站的跳出率),并且我们要尽量在一些比较大的网站增加我们站点的曝光率,因为spider会经常访问大站,比如我们在掘金等技术社区发表文章中带有我们的站点,这样spider是很有可能爬到我们中的站点的,so….
网站外链的推广度、数量和质量网站的内链足够强大网站的原创质量网站的年龄时间网站的更新频率(更新次数越多越好)网站的服务器网站的流量:流量越高网站的权重越高网站的关键词排名:关键词排名越靠前,网站的权重越高网站的收录数量:网站百度收录数量越多,网站百度权重越高网站的浏览量及深度:用户体验越好,网站的百度权重越高
2.优化代码块样式
由于代码高亮插件prism_plugin的样式没有行号显示和代码块整体复制功能,不是很方便,为了优化观感和易用性,我们可以对其进行修改:待续……
2.1给代码块开启行号
我们在配置文件.yml中找到prism_plugin配置项line_number:false(272822;\noverflow:auto;\nborder-radius:0.35rem;\ntab-size:4;\n}\n
改为:
pre{\npadding:1.5rem1.5rem1.5rem3.3rem!important;\nmargin:1rem0!important;\nbackground:39;CourierNew&e96900;\nbackground-color:39;myGallery&39;.img-item&39;img[data-original]&34;href&34;data-original&lazyloadconfiguration2019.08.23\nlazyload:\nenable:true\nonlypost:false\nloadingImg:安装gulp\n额外的功能模块\nnpminstallgulp-debuggulp-clean-cssgulp-changedgulp-ifgulp-plumbergulp-babelbabel-preset-es2015del–save\n
2接下来在博客的根目录下新建gulpfile.js文件,并复制下面的内容到文件中。
vargulp=require(&34;);\nvardebug=require(&34;);\nvarcleancss=require(&34;);//css压缩组件\nvaruglify=require(&34;);//js压缩组件\nvarhtmlmin=require(&34;);//html压缩组件\nvarhtmlclean=require(&34;);//html清理组件\nvarimagemin=require(&34;);//图片压缩组件\nvarchanged=require(&34;);//文件更改校验组件\nvargulpif=require(&34;);//任务帮助调用组件\nvarplumber=require(&34;);//容错组件(发生错误不跳出任务,并报出错误内容)\nvarisScriptAll=true;//是否处理所有文件,(true|处理所有文件)(false|只处理有更改的文件)\nvarisDebug=true;//是否调试显示编译通过的文件\nvargulpBabel=require(&34;);\nvares2015Preset=require(&34;);\nvardel=require(&34;);\nvarHexo=require(&34;);\nvarhexo=newHexo(process.cwd(),{});//初始化一个hexo对象\n\n//清除public文件夹\ngulp.task(&34;,function(){\nreturndel([&34;]);\n});\n\n//下面几个跟hexo有关的操作,主要通过hexo.call()去执行,注意return\n//创建静态页面(等同hexogenerate)\ngulp.task(&34;,function(){\nreturnhexo.init().then(function(){\nreturnhexo\n.call(&34;,{\nwatch:false\n})\n.then(function(){\nreturnhexo.exit();\n})\n.catch(function(err){\nreturnhexo.exit(err);\n});\n});\n});\n\n//启动Hexo服务器\ngulp.task(&34;,function(){\nreturnhexo\n.init()\n.then(function(){\nreturnhexo.call(&34;,{});\n})\n.catch(function(err){\nconsole.log(err);\n});\n});\n\n//部署到服务器\ngulp.task(&34;,function(){\nreturnhexo.init().then(function(){\nreturnhexo\n.call(&34;,{\nwatch:false\n})\n.then(function(){\nreturnhexo.exit();\n})\n.catch(function(err){\nreturnhexo.exit(err);\n});\n});\n});\n\n//压缩public目录下的js文件\ngulp.task(&34;,function(){\nreturngulp\n.src([&34;,&34;])//排除的js\n.pipe(gulpif(!isScriptAll,changed(&34;)))\n.pipe(gulpif(isDebug,debug({title:&34;})))\n.pipe(plumber())\n.pipe(\ngulpBabel({\npresets:[es2015Preset]//es5检查机制\n})\n)\n.pipe(uglify())//调用压缩组件方法uglify(),对合并的文件进行压缩\n.pipe(gulp.dest(&34;));//输出到目标目录\n});\n\n//压缩public目录下的css文件\ngulp.task(&34;,function(){\nvaroption={\nrebase:false,\n//advanced:true,//类型:Boolean默认:true[是否开启高级优化(合并选择器等)]\ncompatibility:&34;//保留ie7及以下兼容写法类型:String默认:&39;or&39;[启用兼容模式;&39;:IE7兼容模式,&39;:IE8兼容模式,&39;:IE9+兼容模式]\n//keepBreaks:true,//类型:Boolean默认:false[是否保留换行]\n//keepSpecialComments:&39;//保留所有特殊前缀当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀\n};\nreturngulp\n.src([&34;,&34;])//排除的css\n.pipe(gulpif(!isScriptAll,changed(&34;)))\n.pipe(gulpif(isDebug,debug({title:&34;})))\n.pipe(plumber())\n.pipe(cleancss(option))\n.pipe(gulp.dest(&34;));\n});\n\n//压缩public目录下的html文件\ngulp.task(&34;,function(){\nvarcleanOptions={\nprotect:/<\\!–%fooTemplate\\b.*?%–>/g,//忽略处理\nunprotect:/<script[^>]*\\btype=&34;[\\s\\S]+?<\\/script>/gi//特殊处理\n};\nvarminOption={\ncollapseWhitespace:true,//压缩HTML\ncollapseBooleanAttributes:true,//省略布尔属性的值<inputchecked=&34;/>==><input/>\nremoveEmptyAttributes:true,//删除所有空格作属性值<inputid=&34;/>==><input/>\nremoveScriptTypeAttributes:true,//删除<script>的type=&34;\nremoveStyleLinkTypeAttributes:true,//删除<style>和<link>的type=&34;\nremoveComments:true,//清除HTML注释\nminifyJS:true,//压缩页面JS\nminifyCSS:true,//压缩页面CSS\nminifyURLs:true//替换页面URL\n};\nreturngulp\n.src(&34;)\n.pipe(gulpif(isDebug,debug({title:&34;})))\n.pipe(plumber())\n.pipe(htmlclean(cleanOptions))\n.pipe(htmlmin(minOption))\n.pipe(gulp.dest(&34;));\n});\n\n//压缩public/uploads目录内图片\ngulp.task(&34;,function(){\nvaroption={\noptimizationLevel:5,//类型:Number默认:3取值范围:0-7(优化等级)\nprogressive:true,//类型:Boolean默认:false无损压缩jpg图片\ninterlaced:false,//类型:Boolean默认:false隔行扫描gif进行渲染\nmultipass:false//类型:Boolean默认:false多次优化svg直到完全优化\n};\nreturngulp\n.src(&34;)\n.pipe(gulpif(!isScriptAll,changed(&34;)))\n.pipe(gulpif(isDebug,debug({title:&34;})))\n.pipe(plumber())\n.pipe(imagemin(option))\n.pipe(gulp.dest(&34;));\n});\n//执行顺序:清除public目录->产生原始博客内容->执行压缩混淆->部署到服务器\ngulp.task(\n&34;,\ngulp.series(\n&34;,\n&34;,\n&34;,\n&34;,\n&34;,\n&34;,\ngulp.parallel(&34;)\n)\n);\n\n//默认任务\ngulp.task(\n&34;,\ngulp.series(\n&34;,\n&34;,\ngulp.parallel(&34;,&34;,&34;,&34;)\n)\n);\n//Gulp4最大的一个改变就是gulp.task函数现在只支持两个参数,分别是任务名和运行任务的函数\n
3最后hexoclean&&hexog&&gulp&&hexod就可以了。
注意,很可能你会运行到第三步,也就是运行gulp压缩命令时会报错,如图所示:
那是因为gulp安装的本地版本和hexo自带的版本不对应导致,第三步gulp压缩可以用下面命令强制使用本地版本:
node./node_modules/gulp/bin/gulp.js\n
3.一些注意事项
3.1备份博客源文件
有时候我们想换一台电脑继续写博客,最简单的方法就是把博客整个目录拷贝过去,就是这么暴力。不过,这种方法有个问题就是要是那天电脑崩了,本地源文件丢失了,比较麻烦,所以这时候就可以将博客目录下的所有源文件都上传到github上面。
首先在github博客仓库下新建一个分支hexo,然后gitclone到本地,把.git文件夹拿出来,放在博客根目录下。
然后gitbranch-bhexo切换到hexo分支,然后gitadd.,然后gitcommit-m&34;,最后gitpushoriginhexo提交就行了。
具体效果可以看我的博客源文件仓库:传送门。
大家也可以先用下文hexo安装方法安装完hexo,然后直接gitclone-bhexohttps://github.com/shw2018/shw2018.github.io.git克隆我的所有源文件,这是我目前修改完的基本没bug的定制化的博客,可以直接拿来用。
ps://github.com/shw2018/shw2018.github.io.git克隆我的所有源文件,这是我目前修改完的基本没bug的定制化的博客,可以直接拿来用。
OK,关于如何网站源码分享搭建和有网站源码如何搭建自己的网站的内容到此结束了,希望对大家有所帮助。