从零开始的博客开发(一)

开始

  • 最近用了vuepress搭了一个博客之后觉得很不错,一开始是想试着做一个vuepress主题,后来想了想,既然要做博客,不如直接用Vue从零搭建一个,于是乎就开始了紧张刺激的开发工作.

整体思路

  • 由于目前还没有学过Node,对于服务器相关的不是很了解,所以打算做一个静态博客,页面实现思路模仿vuepress,将每个Markdown文件渲染成组件进行展示
  • 博客页面整体做成三栏,左边是文章内容睦路,右边是个人信息和一些别的展示内容,中间展示博客目录和博客内容。
  • 除了文章,还想要有归档页面,大概做成时间线的感觉,还有留言页面。
  • 整体样式就用扁平化的风格,个人比较喜欢的感觉。
  • 更多功能待补充。。。

问题

  • 基本的文件内容就不多赘述,上来最先遇到的问题就是关于Markdown文件的解析。
  • 最开始的思路:用markdown-loader和html-loader加载Markdown文件,但是这样一来要手动设置组件,然后手动添加路由。这显然是不合适的,每写一篇文章还要更改代码太逆天了。并且在此期间,我明白了在Vue中不能使用fs模块读取本地文件,vue的内容是运行在浏览器环境下的,而fs是在node中运行读取本地文件的。
  • 那么问题来了,我在写vuepress的自动设置侧边栏工具的时候是可以使用fs模块的,这是为什么呢?于是我就又看了看官方文档,发现它的config.js文件是作为一个插件,在本地打包的时候就已经运行好了,而本地就是Node环境,所以fs模块可以生效。
  • 然后我就想知道在运行了npm run serve之后发生了什么,这个留着以后搞明白了再说

解决方案

  • 最后的解决方案,我去看了一下vuepress的源码,它是使用markdown-itloader解析Markdown文件,然后自定义了一个markdown-loader,把解析出来的html内容,放到vue组件的<template>内容里边,接着交给vue-loader处理,这样就把Markdown文件转换成了Vue组件。
  • 于是我就模仿着写了一个markdown-loader,转换成了Vue组件
  • 组件问题解决了,文件读取问题我在查了资料之后发现可以用require.context()方法来获得转换后的vue组件,语法require.context(directory, useSubdirectories = false, regExp = /^.//)具体用法参考

代码

markdownLoader的简单实现,相关的样式我修改了一个喜欢的Typora主题拿来用了。


const MarkdownIt = require('markdown-it')
const md = new MarkdownIt()
module.exports = function(src) {

  const html = md.render(`${src}`)
  const title = getTitle(html);
  return (
    `<template>\n
      <div id="write">
        ${html}
      </div>\n
    </template>\n
    `
  )
}

文件读取相关,导出的模块分别在加载路由和文章目录中引用

//文件读取
//fileAPI.js
const files = require.context('@assets/artical/', false, /\.md$/)
import Time from "@assets/time.js"


const test = require('@assets/artical/')

const componentLists = []
const children = []
const pathLists = []
const articalLists = []

files.keys().forEach((item, index) => {
  let routeItem = {}
  let articalInfo = {}
  let path = item.slice(2, -3)
  let component = files(files.keys()[index]).default

  routeItem.path = path
  routeItem.component = component

  articalInfo.path = path 

  articalLists.push(articalInfo)
  children.push(routeItem)
})
//childeren用于设置子路由
//articalLists用于博客目录的展示和点击跳转页面时转向的路径
export {children, articalLists} 

总结

  • 我会一直记录这个博客网站的搭建,从中学到了不少东西,同时也知道了有哪些知识不足的地方,最近要把webpack相关的知识学习一下,这个构建工具的重要性我已经领略到了。
  • 目前的实现方式还有很多不足的地方,这个路由设置的方法没有办法进行懒加载,如果以后文章多了可能会性能低下。markdown文章的标题抓取,Tag设置,还有展示在目录中的文章前一部分内容的抓取等等,都还没有实现,一步一步慢慢来吧。
  • 果然实践中可以学到很多,还有读源码也是很好的学习方式,希望可以坚持做好,并且坚持记录这个有趣的过程。
  • 源码地址https://github.com/DouMJun/myBlog-Vue欢迎提问和联系我

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值