Viki, 一个后端开发抄写的前端项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
tamlok

Viki, 一个后端开发抄写的前端项目

  •  
  •   tamlok Nov 18, 2018 3788 views
    This topic created in 2718 days ago, the information mentioned may be changed or developed.

    背景

    这两年写了个 VNote 项目,一直都觉得 VNote 的主页不是很满意。目前的主页是用的一些 HTML 的模块组装在一起的纯 HTML,所以每次改动都十分麻烦。

    对于 Jekyll 和 Hexo 等静态博客框架,觉得各种条条框框,还是不够纯粹。我希望能够在 VNote 里面简简单单地写 MD,然后就可以在网站上优美展示出来的。

    在 HackerNews 上的评论里面发现了MDWiki,认识了#!docs/readme.md这种访问方法。

    但是 MDWki 有几点不足:

    1. 可能由于可以变换主题,所以每次渲染前都会显示一个 raw 的 HTML,用着不爽;
    2. 笔记的入口只有顶部的导航菜单,所以如果是作为日常博客的话,大量的笔记很难展示;

    后面,@akkuman 弄了一个vnote2site,把一个index.html放在 VNote 的笔记本里面,就能 ajax 读取_vnote.json文件,并列出笔记本的内容。

    感觉 MDWiki 和 vnote2site 能够结合在一起,其实Boostrap的官网就是我想要的效果:

    • 一些主要的页面是离散的 MD 文件,例如首页 /下载等等;
    • 文档则会在左边展示一个文件导航栏,用于浏览大量的有组织的笔记;

    行动

    本来想基于 MDWiki 来开发的,但是看了一下 MDWiki 的源码就怕了,typescript,各种package.jsongruntfile.js之类的配置文件,不知道怎么入手。一个前端怎么就这么复杂呢?于是,打算自己从头弄一个简单的就行了。

    建了一个项目,写了几行代码。给一个朋友看了一下,他说建议使用 ES6,有基本的类之类的,封装什么的不用太别扭。于是,看了一下 ES6 的一主要语法,把前面的几个文件都改写了。

    这时候,我意识到并不是更新了代码后,直接浏览器 F5 就可以了,还需要“编译”,将 ES6 转换为 ES5。朋友推荐了parcel这个工具,刚开始还挺好用的,很是方便。但是,后面发现,我用到的markdown-it的一些插件是自己改过的,但是parcel只能使用 npm 安装的包。

    算了,还是看看 MDWiki 用的是啥吧。最后,就选了 Grunt 来定制一套流程。总算是能安稳地写一个 Hello World 了。不得不说,前端真的是太乱了,让人不知道怎么入手。

    Viki

    经过了两三周,Viki 初版总算出来了。

    项目地址: https://github.com/tamlok/viki

    Viki 主页: https://tamlok.github.io/viki/

    Screenshot_20181118_135150.png

    样式啥的,都是对着 Boostrap 的网站 F12 “借鉴”过来的。看着还算赏心悦目吧~~比 VNote 好看多了。 :)

    使用

    把 Viki 源码目录下的dist/文件夹里面的内容拷贝到你的项目根目录下面,然后找个地方托管,例如 GitHub Pages 或者本地起一个 python SimpleHTTPServer,那么就可以通过以下形式来访问对应的 MD 文件了:

    • localhost:8080/viki.html#!def/abc.md 会访问根目录下面的def文件夹下面的abc.md文件。
    • 如果将viki.html改名为index.html,则可以忽略viki.html部分。

    VNote 结合

    Viki 使用的是 VNote 同款的 markdown-it 渲染,所有语法和元素都完全兼容。

    另外,在navigation.json配置文件里面可以将一个导航入口指向 VNote 的笔记本或文件夹里面的索引文件_vnote.json,这样,就可以读取并列出 VNote 里面的笔记,效果如下:

    Screenshot_20181118_135752.png

    结语

    Viki 的应用场景就是静态博客,项目主页或者局域网内分享笔记等等。有一个问题是,这样动态的渲染方式好像对搜索引擎不太友好。

    后面会打算将 VNote 的主页重新写一下。

    谢谢!

    另外,Viki 目前不支持 IE 浏览器,这个我实在不知道怎么弄了~~

    再卑鄙地放一个项目地址: https://github.com/tamlok/viki

    8 replies    2020-05-09 20:38:54 +08:00
    niubee1
        1
    niubee1  
       Nov 18, 2018
    感觉并没有比 Jekyll 和 Hexo 方便到哪里去啊
    itfanr
        2
    itfanr  
       Nov 18, 2018 via Android   1
    很好 用过 vmote
    tamlok
        3
    tamlok  
    OP
       Nov 18, 2018 via Android
    @niubee1 不用编译,纯动态渲染
    waruqi
        4
    waruqi  
       Nov 18, 2018 via Android
    支持静态编译么?之前一直用 docute v3 什么都好,就是动态渲染对 seo 实在是不友好,正在找其他替代方案,发现 vuepress,也还不错,可惜目录层级限制在 3 层以内,哎。。
    tamlok
        5
    tamlok  
    OP
       Nov 18, 2018 via Android
    @waruqi 不支持,所以这个一般用于项目主页还行,用于博客的话,对搜索引擎不友好。
    likuku
        6
    likuku  
       Nov 18, 2018   1
    清新简洁,很好看!
    waruqi
        7
    waruqi  
       Nov 18, 2018 via Android
    @tamlok 嗯嗯 我主要是想做项目主页+项目文档 如果能够对搜索引擎友好 就更好了
    xe2vherd
        8
    xe2vherd  
       May 9, 2020
    支持生成 sitemap 吗
    About     Help     Advertise     Blog     API     FAQ     Solana     953 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 21:08 PVG 05:08 LAX 14:08 JFK 17:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86