内容简介:很久以前,自己拥有一个用hexo搭建的静态博客网站:ox:,记得当时为了把它搞出来,废了不少劲:anger:,然后后来又断断续续更改过一些配置和样式,但是因为感觉各种麻烦,所以就放在1、 目前开发用vue框架:fire:2、 就是想用它搞一个:muscle:
很久以前,自己拥有一个用hexo搭建的静态博客网站:ox:,记得当时为了把它搞出来,废了不少劲:anger:,然后后来又断断续续更改过一些配置和样式,但是因为感觉各种麻烦,所以就放在 github
上积累和很多的尘土:cupid:,到现在也懒得在打扫了(其实是好久不用,有点忘了怎么用了:-1::poop:),前段时间在百度统计上看了看那个静态网站的访问人数,发现已经很久很久没人访问过了,:sweat_smile:,然而就在前段时间(没错,就是前面那个时间),我灵光一闪,为啥不重新弄个静态博客呢:heart_eyes:,于是我就决定洗洗睡觉(没错,那是一个夜深人静的晚上),第二天抽空找个简单点的框架,然后搭个静态博客,用来记录自己的所见所闻所想:tada: 第二天一大早吃完中午饭后(睡到中午了:sunglasses:),我就看起了VuePress官网,没错,我选择了VuePress框架,至于为什么呢,有以下几点:
1、 目前开发用vue框架:fire:
2、 就是想用它搞一个:muscle:
3、 反正也简单,实在不行再换呗(搞不起来是不可能的):clap:
4、 没有别的理由了:notes:
它有什么好处、特性、和别的框架对比? 看人家官网就得了,说的挺好的
项目搭建
没啥好说的,按照人家官网搭就完事了,人家写的那么清晰、明了。感觉尤大出品的文档都很友好,阅读起来很方便
# 将 VuePress 作为一个本地依赖安装 yarn add -D vuepress # 或者:npm install -D vuepress # 新建一个 docs 文件夹,你也可以打开编辑器来手动创建 mkdir docs # 新建一个 markdown 文件 echo '# Hello VuePress!' > docs/README.md # 启动,让你感受下效果-----but:这种启动方式不爽,还是放package.json里省事,所以感受完了就结束进程吧, npx vuepress dev docs 复制代码
项目安装完成后,我们进入 package.json
里面,添加script启动项
"scripts": { "docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs" } 复制代码
上面一顿操作后我们现在要知道三件事情:
1、我们以后所有的文章都将在 docs
中写
2、开发,也就是写作的时候执行:
yarn docs:dev # 或者:npm run docs:dev // 默认端口http://localhost:8080/ 复制代码
3、打包生成静态html文件,执行
yarn docs:build # 或者:npm run docs:build 复制代码
默认情况下,生成的静态文件放在 .vuepress/dist
中,不过可以改的
好了,先来认识下我们以后要大展拳脚的地方 docs
目录:
. ├─ docs //以后要在这里面写文章,直接在此文件夹下新建文件夹,然后再建md文档就行,链接会自动生成 │ ├─ README.md // 这个将会是我们以后的首页 │ └─ .vuepress // 这个里面会存放一些配置和组建 │ └─ public // 静态文件存放地 │ └─ components // 组建存放地 │ └─ config.js //配置文件,我们以后的所有配置基本都在这里写 └─ package.json 复制代码
原谅我这部分说的比较糙,其实这部分看官网就好了,人家讲的的确挺详细的,要讲的主要是下面的内容:
首页配置
官网默认主题提供了一个只需要写写配置就能生成的页面,格式是固定的,和VuePress的首页一毛一样,但是这不是我想要的(我也不知道我想要什么样的),所以我在 .vuepress/components
中新建了一个组建叫 home
,同时在首页引入:(md文件里可以写vue代码的哦)
// 记得不要复制注释 --- navbar: false // 不要导航栏 isNoPage: true // 自定义的属性 sidebar: false // 不要侧导航 pageClass: home-list //自定也页面类 --- <home /> 复制代码
.vuepress/components/home.vue
和我们平时写vue没啥区别,引用的时候就用这个文件的文件名就可以了,官网有介绍,因为目前还没想好首页改做成什么样的,所以就先这样放着
isNoPage
是我自己写的,主要是为了标志当前是否是文章页,以后会用来做判断,在 this.$site.frontmatter
中存放
pageClass
是页面自定义类,编译的时候会把这个类加在外层的div中,可以根据这个来写自己想要的样式
/**这段css可以写在.vuepress/style.styl中,这个是我对首页写的样式**/ home-list{ .page-edit{ display: none /**隐藏首页的编辑和最后修改时间标签**/ } #gitalk-container{ display:none /**隐藏首页的评论**/ } } 复制代码
列表页的实现
每一张文章页,我都会在头部添加
--- tags: vuepress, 前端 description: 本文介绍应该VuePress搭建一个博客,据官网说:VuePress 由两部分组成:一部分是支持用 Vue 开发主题的极简静态网站生成器,另一个部分是为书写技术文档而优化的默认主题。它的诞生初衷是为了支持 Vue 及其子项目的文档需求。 --- 复制代码
- tags: 是当前页面的标签,用于在列表页生成标签云
- description:页面的描述信息,在列表页会显示,官网中有获取
more
之前的方法,但是会有样式,所以会感觉很难看,所以我就添加的这个description
字段,当然,我也并没有放弃官网的方法,因为有时候可能真的懒得写描述信息了,所以加了个判断
<div v-if="item.frontmatter.description" class="art"> {{item.frontmatter.description}}……<a :href="item.path" class="look">阅读原文</a> </div> <div class="art" v-html="item.excerpt" v-else></div> 复制代码
获取说有文章的列表我是通过一开始设置的 isNoPage
来做的判断
const arts = this.$site.pages.filter(item => { return !item.frontmatter || !item.frontmatter.isNoPage }) 复制代码
标签的实现
我的标签是一个vue组建,然后在列表页引入改组件;上面说到,我在每个文章前面都会加 tags
,我会在标签组件中通过遍历 this.$site.pages
,拿到所有的标签,然后去重,即是我所有页面的标签
<template> <div class="tags"> <h6>标签云</h6> <span v-for="item in tags" @click="handleChangeTag(item)">{{item}}</span> <span @click="handleChangeTag('all')">所有</span> </div> </template> <script> export default { data() { return { tags: [] } }, created() { const tags = this.$site.pages.map(item => { return item.frontmatter && item.frontmatter.tags || "" }) const tagsArr = tags.join(",").split(",").filter(i => i !== "") this.tags = [...new Set(tagsArr)] }, methods: { // 点击标签更改列表 handleChangeTag(tag) { this.$emit('change-tag',tag) } }, } </script> 复制代码
favorite.icon配置
favorite.icon
也就是网页左上角那个小图标
.vuepess/public
下,然后 打开
.vuepress/config.js
,添加
head:[ ['link', { rel: 'shortcut icon', href: '/favorite.icon type: 'image/jpg' }] ] 复制代码
注意href写的是 /favorite.icon
,而不是 /public/favorite.icon
样式更改
在 .vuepress
下新建两个 styl
文件用来写样式
override.styl
:用来覆盖默认主体样式,比如我想让我的内容占据屏幕的90%,可以:
$contentWidth = 90% 复制代码
style.styl
:写自己一些自定义的样式,可以在这个文件夹里写,比如单独修改导航的颜色
.navbar{ background:red } 复制代码
添加评论
作为一个有灵魂的博客,怎么可以不能评论呢,我能忍,博客也不能忍:star2:,我的评论系统用的是GITALK,官网说是这是一个基于 Github Issue 和 Preact 开发的评论插件,现在用的多的貌似还有valine、 gitment ,这个貌似可以统计阅读量;希望gitalk也能出个阅读量统计功能,官网提供的方式有两种,一种是在html中引入js文件,另一种是用npm包的形式,我选择的是通过js将评论需要的js和css用js动态插入到页面中,在 .vuepress/enhanceApp.js
中写如下代码:(enhanceApp.js介绍)
const getGitalk = ({pages})=> { const path = window.location.pathname // 获取当前页面信息 const dist = pages.filter(item => { return item.path === path })[0] //只有在isNoPage是false的时候才会显示评论 if (!dist.frontmatter || !dist.frontmatter.isNoPage) { const page =document.querySelector('.page') const linkGitalk = document.createElement('link'); linkGitalk.href = 'https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css'; linkGitalk.rel = 'stylesheet'; document.body.appendChild(linkGitalk); const scriptGitalk = document.createElement('script'); scriptGitalk.src = 'https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js'; document.body.appendChild(scriptGitalk); scriptGitalk.onload= () => { let gitalk = document.createElement('div') gitalk.id = 'gitalk-container' page.appendChild(gitalk) var _gitalk = new Gitalk({ clientID: '11111111111111', clientSecret: '2222222222222222', repo: 'slbyml.github.io', // 存储评论的仓库名字 owner: 'slbyml', admin: ['slbyml'], //仓库的管理员,可以有多个 id: decodeURI(path), // 每个页面根据url生成对应的issue,保证页面之间的评论都是独立的 }) _gitalk.render('gitalk-container') } } } export default ({ Vue, // VuePress 正在使用的 Vue 构造函数 options, // 附加到根实例的一些选项 router, // 当前应用的路由实例 siteData // 站点元数据 }) => { setTimeout(() => { // 打包的时候因为没有document,所以要加个try try { document && getGitalk.call(this, siteData) } catch (e) { console.error(e.message) } },500) } 复制代码
对于 gitalk
的用法请看官网,但是要讲两个元素 clientSecret
和 clientSecret
,这两个怎么来的呢,是 在这申请的 ,创建完成后可以看到生成的这两个字段
::: tip 注意: 如果想在框架中引入第三方框架,比如element-ui,也可以在这个js中引入注册 :::
部署
部署就简单了,我目前是两个仓库,一个私有的,用来存放源代码,一个就是用来存放生成的静态文件的 仓库 更改 package.json->script
:
"scripts": { "docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs", "deploy": "bash deploy.sh" // 新加的,用来生成静态文件及上传到github } 复制代码
然后根目录下新建 deploy.sh
文件:
#!/usr/bin/env sh # 确保脚本抛出遇到的错误 set -e # 生成静态文件 npm run docs:build # 进入生成的文件夹 cd dist git init git add -A git commit -m 'deploy' # 如果发布到 https://<USERNAME>.github.io/<REPO> git push -f git@github.com:slbyml/blog.git master cd - 复制代码
我的默认生成的静态文件在根目录下的 dist
,因为我更改了 config.js
里的配置,保证docs里面的文件是干净的
dest: 'dist' 复制代码
这样在我执行 npm run deploy
的时候就会自动生成静态文件,并上传的github上,是不是很方便 最后,这些都是我自己做的事情,可能会有更好的实现,所以欢迎讨论!!:clap: 以后想添加的东西:
- 添加下拉加在更多功能
- 添加文章阅读量和文章字数
- 丰富列表页
- 丰富首页
最后的最后这篇文字也是突发奇想写的,刚开始不知道写啥,所以就边写变想该写啥( 负面教学,别学我
),没想到写着写着,文思泉涌:clap: ,一片文采华丽的文章就这么诞生了,从没发现自己还有写文章的天赋。转载原文
以上所述就是小编给大家介绍的《用vuepress搭建一个够自己用的博客》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Django搭建个人博客:编写博客文章的Model模型
- 使用 Hugo 搭建博客
- 使用lamp搭建个人博客
- Docsify快速搭建个人博客
- 极速搭建一个个人博客网站
- Django搭建个人博客:用户的删除
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
叠加体验:用互联网思维设计商业模式
穆胜 / 机械工业出版社 / 2014-11 / 39.00
本书在互联网思维改变一切的背景下,详细介绍了如何运用互联网思维重构商业模式,主要包括以下内容:①互联网经济中的商业逻辑(即“互联网思维”),不仅给出了消费方面的逻辑变革,还给出了在生产端的逻辑变革以及“跨界”的逻辑变革。②给出了一个“三层产品体验模型”,厘清了互联网思维,打造完美终端、云端服务和价值群落三层体验,企业可以选择做不同层面的体验组合,这即是选择了不同的市场策略。但是,企业要基业长青,终......一起来看看 《叠加体验:用互联网思维设计商业模式》 这本书的介绍吧!
正则表达式在线测试
正则表达式在线测试
HEX HSV 转换工具
HEX HSV 互换工具