内容简介:这个博客是基于Vuepress1.X来搭建的。记录一些技术方面的知识。下面是介绍怎么用Vuepress从头开始搭建一个技术博客。Vuepress是Vue生态中关于静态网站的一个生成器,对于技术类型博客支持很好,配置少,上手快,UI风格讨人喜欢。这个博客网站使用的是Vuepress1.x来进行搭建的。除了这个博客之外下面的网站也是使用的vuepress本篇教程一共会在github上面建立两个项目,一个用来写博客,另外一个用来展示博客。其实也可以合成一个项目,看个人喜好。
这个博客是基于Vuepress1.X来搭建的。记录一些技术方面的知识。下面是介绍怎么用Vuepress从头开始搭建一个技术博客。
Vuperss简介
Vuepress是Vue生态中关于静态网站的一个生成器,对于技术类型博客支持很好,配置少,上手快,UI风格讨人喜欢。这个博客网站使用的是Vuepress1.x来进行搭建的。除了这个博客之外下面的网站也是使用的vuepress
开始
- 默认你的电脑上有Node环境
- Node.js 的版本大于 8.6
- 如果已经阅读过官方文档最好不过
本篇教程一共会在github上面建立两个项目,一个用来写博客,另外一个用来展示博客。其实也可以合成一个项目,看个人喜好。
安装vuepress
在这个博客使用的是vuepress1.X所以安装的时候需要这样安装:
yarn global add vuepress@next // OR npm install -g vuepress@next 复制代码
如果想要使用vuepress0.X,按照下面的安装方式,
yarn global add vuepress // OR npm install -g vuepress 复制代码
对于新手搭建博客这两个版本的区别不大,这个博客中建议使用vuepress1.X。
搭建博客项目
一共分为四个部分
- 搭建一个初始项目并且能用vuepress来写博客
- 配置导航和侧边栏
- 构建并且发布
- 自动化部署
开始之前我先放一个我的博客的目录结构:
第一部分:搭建项目
新建write-blog文件夹,并且初始化项目,在第一部分中
mkdir writ-blog cd writ-blog npm init -y mkdir docs // 这个文件夹是放置所有博客的地方 cd docs touch README.md //创建reademe文件,即首页 复制代码
初始化的目录结构如下所示:
. ├─ docs │ └─ README.md └─ package.json 复制代码
注意 docs文件夹是你所有博客所在的文件夹,docs文件夹根目录下的README.md 文件在经过vuepress的编译之后会成为你的博客网站的首页!!!
在docs跟目录中的README.md文件中写上以下内容:
--- home: true heroImage: /logo.png actionText: 介绍 → actionLink: /blog/ features: - title: 框架 details: Vue、React、Abgular、Flutter的学习和实践。 - title: 工作笔记 details: 好记性不如烂笔头,记录平时工作中遇到的一些问题和解决方法。 - title: 前端可视化 details: 前端方面可视化的知识,包括webgl,canvas,glsl等。 - title: 后端 details: 前端怎么能不了解一些后端知识呢? 一些个人对后端的学习和实践。 - title: 开发环境配置 details: 有时候开发环境的配置也是很头疼的,windows和mac下面又各不一样,工具的熟练程度直接决定开发速度,所以留文待查吧。 footer: MIT Licensed | Copyright © 2019-present chenfeng --- 复制代码
注意: 这个文件就是你博客的首页(index.html),```'home: true'```,是必须的
初始化之后,在package.json中的script中添加两个命令:
"dev": "vuepress dev docs", "build": "vuepress build docs", 复制代码
然后执行 npm run dev ,在浏览器中打开服务,会出现一个页面,大概长得是这个样子
,到这里第一步就已经完成了,你已经可以写博客了,但是远远不能满足咱们的需求,这个时候就需要配置导航和侧边栏了。
第二部分:配置导航和侧边栏
第二部分的目录结构如下:
. ├─ .vuepress │ └─ config.js ├─ docs │ └─ README.md └─ package.json 复制代码
你会注意到这一步多出了一个 .vuepres 的文件夹,有关vuepress的配置,都在这个文件夹之中,下面介绍一下有关导航栏和侧边栏的配置。 .vuepress/config 中的基本配置如下:
module.exports = {
title: 'chenfeng\'s blog',
description: 'chenfeng的个人博客',
}
复制代码
当你完成上述步骤的话,你在本地起的dev环境所呈现的网页应该包含一个页头,和一个描述。
下面这个配置内容是我的网站的配置:
module.exports = {
title: 'chenfeng\'s blog',
description: 'chenfeng的个人博客',
head: [ // 注入到当前页面的 HTML <head> 中的标签
['link', { rel: 'icon', href: '/logo.png' }], // 增加一个自定义的 favicon(网页标签的图标)
['link', { rel: 'manifest', href: '/logo.png' }],
['link', { rel: 'apple-touch-icon', href: '/logo.png' }],
['link', { rel: 'mask-icon', href: '/logo.png', color: '#3eaf7c' }],
['meta', { 'http-quiv': 'pragma', cotent: 'no-cache' }],
['meta', { 'http-quiv': 'expires', cotent: '0' }],
['meta', { 'http-quiv': 'pragma', cotent: 'no-cache, must-revalidate' }]
],
serviceWorker: true, // 是否开启 PWA
base: '/', // 这是部署到github相关的配置
markdown: {
lineNumbers: true // 代码块显示行号
},
themeConfig: {
nav: [
{ text: '主页', link: '/' },
{
text: '基础', items: [
{ text: 'JavaScript', link: '/basis/JavaScript/' },
{ text: 'HTML', link: '/basis/HTML/' },
{ text: 'CSS', link: '/basis/CSS/' },
{ text: 'TypeScript', link: '/basis/CSS/' },
]
},
{
text: '框架', items: [
{ text: 'Vue', link: '/frame/Vue/' },
{ text: 'React', link: '/frame/React/' },
{ text: 'Angular', link: '/frame/Angular/' },
{ text: 'Flutter', link: '/frame/Flutter/' }
]
},
{ text: '工作笔记', link: '/work/' },
{ text: '前端可视化', link: '/visualization/' },
{ text: '环境配置', link: '/devconfig/' },
{ text: 'Github', link: 'https://github.com/soyomo' }
],
sidebar: {
'/blog/': getSidebar('blog'),
'/frame/': getSidebar('frame'),
'/basis/': getSidebar('basis')
},
sidebarDepth: 2, // 侧边栏显示2级
}
};
function getSidebar(barName) {
const sidebar = {
frame: [
'/frame/',
'/frame/Vue/',
'/frame/React/',
'/frame/Angular/'
],
blog: [
'/blog/'
],
basis: [
]
}
return sidebar[barName]
}
复制代码
如果你感觉文件太长的话,可以单独把nav和sidebar提到另外一个独立的文件之中。我的 .vuepress 的文件目录结构是这样的:
其中 nav.js 的内容如下所示:
module.exports = [
{ text: '主页', link: '/' },
{
text: '基础', items: [
{ text: 'JavaScript', link: '/basis/JavaScript/' },
{ text: 'HTML', link: '/basis/HTML/' },
{ text: 'CSS', link: '/basis/CSS/' },
{ text: 'TypeScript', link: '/basis/CSS/' },
]
},
{
text: '框架', items: [
{ text: 'Vue', link: '/frame/Vue/' },
{ text: 'React', link: '/frame/React/' },
{ text: 'Angular', link: '/frame/Angular/' },
{ text: 'Flutter', link: '/frame/Flutter/' }
]
},
{ text: '工作笔记', link: '/work/' },
{ text: '前端可视化', link: '/visualization/' },
{ text: '环境配置', link: '/devconfig/' },
{ text: 'Github', link: 'https://github.com/soyomo' }
]
复制代码
然后把这个文件引入到 config.js 中就可以了.这个时候的导航还是不能工作的,因为你会找不到路径。所以需要把导航对应的文件夹都建立好,这些文件夹都是建立在 docs 的跟目录中的,博客每个页面对应的文件都是在docs的跟目录下的!!!这些文件夹建立好之后,都要创建一个README.md的文件,因为当你的路径只写文件夹的时候,这个文件在vuepress中是路径默认匹配的。我的docs的文件目录如下:
这个时候运行项目,每一个导航栏对应的页面应该时空白页面。
关于 docs/.vuepress/public 这个文件夹:
是存放公共的资源的,我把我博客的logo放到了这个文件夹中,每篇博客的静态资源建议放到该篇博客的目录下而不是都放到public之中。例如:本片教程中的图片我都放到了这篇文章对应的目录下面:
blog文件夹的路径: write-blog/docs/blog ;
关于 pwa 的 manifest 配置也是需要放到这个文件夹中的。 manifest.json的内容:
{
"name": "chenfeng",
"short_name": "feng",
"start_url": "index.html",
"display": "standalone",
"background_color": "#2196f3",
"description": "个人网站",
"theme_color": "blue",
"icons": [
{
"src": "./logo.jpg",
"sizes": "144x144",
"type": "image/png"
}
],
"related_applications": [
{
"platform": "web"
},
{
"platform": "play",
"url": "https://play.google.com/store/apps/details?id=cheeaun.hackerweb"
}
]
}
复制代码
到此为止,第二部分就完毕了。
第三部分:构建并且发布
在这个部分中你需要在github上新建一个项目,我的项目是 项目 ,其实这个项目就是所谓的GitHub Pages,新建好项目之后需要在该项目的setings中,
{你的用户名}.github.io ,然后你就拥有了一个gitpage,就可以直接通过该链接访问了。
https://{username}.github.io/
; 做完这些之后,需要在你的write-blog项目中的package.json中添加以下命令:
"scripts": {
"dev": "vuepress dev docs",
"build": "vuepress build docs",
"deploy": "bash deploy.sh",
},
复制代码
并且在 write-blog 文件的跟目录下新建一个 deploy.sh 文件,内容如下:
#!/usr/bin/env sh
# 确保脚本抛出遇到的错误
set -e
npm install -g vuepress@next
# 生成静态文件
npm run build
# 进入生成的文件夹
cd docs/.vuepress/dist
# 如果是发布到自定义域名
# echo 'www.example.com' > CNAME
git init
git add -A
git commit -m 'deploy'
# 如果发布到 https://<USERNAME>.github.io
# git push -f https://${token}@${address} master:master
git push -f git@github.com:{你的用户名}/{你的用户名}.github.io.git master
# 如果发布到 https://<USERNAME>.github.io/<REPO>
# git push -f git@github.com:<USERNAME>/<REPO>.git master:gh-pages
cd -
复制代码
然后,执行 npm run deploy ,之后就会发布到 {username}.github.io 这个项目中去了,并且通过连接是可以访问的。这样就基本可以实现书写博客了,但是每次写完都得去 npm run deploy 一下,并不是很友好,那么自动化部署就会帮到你了。
第四部分:travis自动化部署
对于travis,如果你还没有听说过,那么这里有一篇入门的教程供你参考。在这个环节里,分为三部分:
- 用你的github账号登陆travis网站
- 在github上面申请Personal access tokens
- 在travis中设置环境变量
申请Personal access tokens
去 github setting 申请一个Personal access tokens
点击Generate new token
随便起一个Note,然后把所有的都给勾选上,然后点击Generate token这个按钮,结果大概是这样的
,然后点击后面的复制按钮图标,留作第二步使用;
设置Environment Variables :100:
去travis上你的项目中的More OPtions(下图中右上角):
中找到Settings,再在Environment Variables中添加环境变量,我添加的类似于下图,
图中的token后面的内容就是第一步中复制的内容,address的内容是我的github项目的地址。添加完毕之后,在项目中的deploy.sh文件中修改git push 的内容,如下:
!/usr/bin/env sh
# 确保脚本抛出遇到的错误
set -e
npm install -g vuepress@next
# 生成静态文件
npm run build
# 进入生成的文件夹
cd docs/.vuepress/dist
# 如果是发布到自定义域名
# echo 'www.example.com' > CNAME
git init
git add -A
git commit -m 'deploy'
# 如果发布到 https://<USERNAME>.github.io
git push -f https://${token}@${address} master:master
# 如果发布到 https://<USERNAME>.github.io/<REPO>
# git push -f git@github.com:<USERNAME>/<REPO>.git master:gh-pages
cd -
复制代码
这样,在提交代码的时候就不用每次都去 npm run deploy 了
报错
当初部署的时候,并没有去github申请token导致在travis上报错,如果遇到这个报错:
说明没有权限往git仓库上提交代码,那么这个时候就需要重复第四个步骤:travis自动化部署。
后续
上面的步骤都做好之后,一个简单的博客网站就已经在你的手中诞生了,这个时候应该去买杯咖啡或者吃顿大餐来犒赏一下自己:tada: :tada: :tada:,但是这个博客并没有可以评论的地方怎么办呢?
添加评论系统
在添加评论之前你需要准备clientID和clientSecret,这两个东西的生成是在这里 Register a new OAuth application ,
’,点击Register application 之后会跳转一个新页面你就会看到clientID和clientSecret了。然后接下来就是添加系统评论的部分了。
我的博客里面用的是 gittalk 来实现评论的,gittalk的原理就是利用github的issue来实现评论博客的。具体的实现是在 .vuepress/enhanceApp.js 文件中。关于enhanceApp.js的内容可以参考vuepress的官方文档,在这个博客项目中就只需要在该文件中输入以下代码就可以了:
function integrateGitalk(router) {
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);
router.afterEach((to) => {
if (scriptGitalk.onload) {
loadGitalk(to);
} else {
scriptGitalk.onload = () => {
loadGitalk(to);
}
}
});
function loadGitalk(to) {
let commentsContainer = document.getElementById('gitalk-container');
if (!commentsContainer) {
commentsContainer = document.createElement('div');
commentsContainer.id = 'gitalk-container';
commentsContainer.classList.add('content');
}
const $page = document.querySelector('.page');
if ($page) {
$page.appendChild(commentsContainer);
if (typeof Gitalk !== 'undefined' && Gitalk instanceof Function) {
renderGitalk(to.fullPath);
}
}
}
function renderGitalk(fullPath) {
const gitalk = new Gitalk({
clientID: '****', // 在github上生成的
clientSecret: '****', // 在github上生成的 come from github development
repo: '****', // 你的博客的仓库名称
owner: '****', // 你在githug上的用户名称
admin: ['****'], // 管理成员
id: 'comment',
distractionFreeMode: false,
language: 'zh-CN',
});
gitalk.render('gitalk-container');
}
}
export default ({Vue, options, router}) => {
try {
document && integrateGitalk(router)
} catch (e) {
console.error(e.message)
}
}
复制代码
需要注意的是因为在开发环境中我们的项目使用的是‘write-blog’,而配置中的repo填写的是博客的项目名称,就会导致在开发环境中登陆不成功,但是如果开发环境中已经有关于评论的部分的话,就说明已经配置成功了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- [译] HPACK:http2中沉默的杀手锏
- ETH2.0进展顺利:以太坊越走越远,“以太坊杀手”们却都沉默了
- vueSSR: 从0到1构建vueSSR项目 --- 路由的构建
- 在 Android Studio 里使用构建分析器提升构建性能
- [译] 使用 React 和 ImmutableJS 构建一个拖放布局构建器
- 为 Envoy 构建控制面指南第4部分:构建的可扩展性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Big Java Late Objects
Horstmann, Cay S. / 2012-2 / 896.00元
The introductory programming course is difficult. Many students fail to succeed or have trouble in the course because they don't understand the material and do not practice programming sufficiently. ......一起来看看 《Big Java Late Objects》 这本书的介绍吧!