<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Vuepress on Techformist</title>
    <link>https://techformist.com/tags/vuepress/</link>
    <description>Recent content in Vuepress on Techformist</description>
    <image>
      <url>https://techformist.com/logo.svg</url>
      <link>https://techformist.com/logo.svg</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 08 Jan 2020 15:30:00 +0000</lastBuildDate><atom:link href="https://techformist.com/tags/vuepress/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Automatic Dynamic Sidebars in Vuepress</title>
      <link>https://techformist.com/automatic-dynamic-sidebar-vuepress/</link>
      <pubDate>Wed, 08 Jan 2020 15:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/automatic-dynamic-sidebar-vuepress/</guid>
      <description>&lt;p&gt;How can you get automatic sidebars to be generated in Vuepress depending on the page?&lt;/p&gt;
&lt;h2 id=&#34;the-situation&#34;&gt;The Situation&lt;/h2&gt;
&lt;p&gt;Vuepress is simple.&lt;/p&gt;
&lt;p&gt;Being simple is rather difficult. In the case of Vuepress, the difficulty can show up in unexpected places.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://techformist.com/using-vuepress/&#34;&gt;Starting with Vuepress is simple enough&lt;/a&gt;. Equally simple is enabling navigation on your site at multiple levels through a &amp;ldquo;sidebar&amp;rdquo; and/or a &amp;ldquo;navbar&amp;rdquo;. Specifically for the sidebar - you can enable in by adding a couple of lines in &lt;code&gt;/docs/.vuepress/config.js&lt;/code&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>How can you get automatic sidebars to be generated in Vuepress depending on the page?</p>
<h2 id="the-situation">The Situation</h2>
<p>Vuepress is simple.</p>
<p>Being simple is rather difficult. In the case of Vuepress, the difficulty can show up in unexpected places.</p>
<p><a href="/using-vuepress/">Starting with Vuepress is simple enough</a>. Equally simple is enabling navigation on your site at multiple levels through a &ldquo;sidebar&rdquo; and/or a &ldquo;navbar&rdquo;. Specifically for the sidebar - you can enable in by adding a couple of lines in <code>/docs/.vuepress/config.js</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1">//...
</span></span></span><span class="line"><span class="cl">  <span class="nx">themeConfig</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sidebar</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span> <span class="nx">title</span><span class="o">:</span> <span class="s2">&#34;Home&#34;</span><span class="p">,</span> <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;&#34;</span><span class="p">]</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">title</span><span class="o">:</span> <span class="s2">&#34;Misc&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;more&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="c1">//...
</span></span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></div><p>The above change will create a sidebar for your site with links under <code>Home</code> and <code>Misc</code>. The title of links will be either -</p>
<ul>
<li>the title of the page (or)</li>
<li>the first header element within the markdown files that the links point to</li>
</ul>
<p>This is how it looks -</p>
<p><img loading="lazy" src="/misc/vuepress-site-navbar-sidebar.gif" type="" alt="vuepress-site-navbar-sidebar"  /></p>
<p>As you can see: the <code>H2</code> headers will be links grouped below the file links.</p>
<p>But, what if you need to do more -</p>
<ol>
<li>you want to create different sidebars for different pages. For e.g. if you are creating a site that has a bunch of different guides instead of one guide with multiple chapters. When you go to specific pages (which are represented as folders in Vuepress root folder), the navigation links have to change to point to different markdown files in a specific folder</li>
<li>you may want to continue having <code>H2</code> behaviour be Vuepress default - show the links within the specific markdown files</li>
<li>you <em>don&rsquo;t want</em> to write links to all the files by hand. Instead you want the system to automatically &ldquo;see&rdquo; the content to be linked</li>
</ol>
<p>In a recent project I needed the &ldquo;Admin&rdquo;, &ldquo;Developer&rdquo; and other folders to have their own sidebars with navigation links. -</p>
<p><img loading="lazy" src="/misc/vuepress-dynamic-sidebar-appearance.jpg" type="" alt="vuepress-dynamic-sidebar-appearance"  /></p>
<p>This sidebar is slightly different from Vuepress default, which seemingly assumes that all of the content is one big happy family. Vuepress by default enables links just point to the different markdown files in the document root, and to the <code>H2</code> elements when the parent links are expanded.</p>
<h2 id="solutions">Solutions</h2>
<p>Let&rsquo;s look at how we can customise sidebar in Vuepress.</p>
<p>Vuepress is after all powered by Vue - so customisation is not really a complex problem. However, I did not find this as straight forward as something like <a href="https://gridsome.org/">Gridsome</a>. In Gridsome you just create a component for navigation like any sane developer and the system will exactly do what it has to - render the navbar.</p>
<p>Vuepress&rsquo;s navbar is driven by config (and if applicable, plugins) - so this seemed not so elegant(!?) at first. But as always - all you need to solve world&rsquo;s problems are good docs and some time.</p>
<p>Given below are three solutions that I tried to different degrees of success. The solution that worked for me is at the end because I am heartless and believe in making people scroll.</p>
<h3 id="solution-1-use-vuepress-plugin-auto-sidebar-plugin">Solution 1. Use <code>vuepress-plugin-auto-sidebar</code> plugin</h3>
<p>The plugin <a href="https://github.com/shanyuhai123/vuepress-plugin-auto-sidebar">vuepress-plugin-auto-sidebar</a> seemed to do exactly what I wanted.</p>
<p>To install a plugin in Vuepress, all you have to do is -</p>
<ol>
<li>Install the package using npm/yarn</li>
<li>Use the plugin in config</li>
</ol>
<p>Let&rsquo;s get this going. Go to Vuepress folder and install package.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">npm install --save vuepress-plugin-auto-sidebar
</span></span></code></pre></div><p>Include plugin in <code>/docs/.vuepress/config.js</code>-</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// ...
</span></span></span><span class="line"><span class="cl">  <span class="nx">plugins</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="s2">&#34;vuepress-plugin-auto-sidebar&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">titleMap</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;salesforce-for-students&#34;</span><span class="o">:</span> <span class="s2">&#34;Salesforce for Students&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;pd1-guide&#34;</span><span class="o">:</span> <span class="s2">&#34;Platform Developer I Certification Guide&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;admin-guide&#34;</span><span class="o">:</span> <span class="s2">&#34;Admin Certification Guide&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;why-learn-salesforce&#34;</span><span class="o">:</span> <span class="s2">&#34;Why Learn Salesforce?&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">misc</span><span class="o">:</span> <span class="s2">&#34;Miscellany&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="c1">// ...
</span></span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>This configuration will provide custom titles for the different folders and automatically pick up the files within the folder to create distinct, dynamic navigation bars.</p>
<p>In the ideal world, this should have been it and I should not have been sitting around to create a blog post about all the circus. But hey - ideal world is not exciting.</p>
<ol>
<li>Getting started was bit of a bother. The documentation of the package is in Chinese and there are not many examples. <a href="https://translate.googleusercontent.com/translate_c?depth=1&amp;hl=en&amp;prev=search&amp;rurl=translate.google.com&amp;sl=zh-CN&amp;sp=nmt4&amp;u=https://github.com/shanyuhai123/vuepress-plugin-auto-sidebar&amp;usg=ALkJrhjEoGnpFTMIIBtnn7mQe2ZOOMElQw">Google translation helped to an extent</a></li>
<li>I could not quite figure out how <code>autoNext</code> and <code>autoPrev</code> worked. My files were not exactly sorted in the folder and sort order of the links in the sidebar was messed up</li>
<li>There were random failures. You could never say when sidebars generation failed (silently), and for the life of me, I could not figure out why. With dozens of files in different folders, I was quite frustrated with all the cut/pasting of content just to see what caused the program to fail</li>
<li>If you have a sub-folder with a <code>README</code> in the root, the README does not show in the navigation. This is expected as per Vuepress, but I could never say when the README appeared as a separate link and when it wouldn&rsquo;t</li>
</ol>
<h3 id="solution-2-use-vuepress-bar">Solution 2: Use <code>vuepress-bar</code></h3>
<p><a href="https://www.npmjs.com/package/vuepress-bar">vuepress-bar</a> was another ready solution that seemed promising.</p>
<p>First, install the package.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">npm i --save vuepress-bar
</span></span></code></pre></div><p>Next, include the plugin in <code>/docs/.vuepress/config.js</code> -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">getConfig</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;vuepress-bar&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">themeConfig</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="p">...</span><span class="nx">getConfig</span><span class="p">(</span><span class="sb">`</span><span class="si">${</span><span class="nx">__dirName</span><span class="si">}</span><span class="sb">/..`</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></div><p>That&rsquo;s it - you should have the new sidebars working. This worked more reliably than solution (1), but I could not figure out how to generate distinct sidebars for indidvidual content folders. All links appeared under one title - which was not ideal for my case.</p>
<p><img loading="lazy" src="/misc/vuepress-bar-sidebar.jpg" type="" alt="vuepress-bar-sidebar"  /></p>
<p>Consider using this library if you just want a dynamic sidebar (and/or a navbar).</p>
<h3 id="solution-3-go-custom">Solution 3: Go custom</h3>
<p>My final solution was just doing everything myself. This was not as scary as it initially appeared - all it took was a couple of lines of code.</p>
<p>Get started by doing changes in <code>/docs/.vuepress/config.js</code> -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">fs</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;fs&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;path&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1">//...
</span></span></span><span class="line"><span class="cl">  <span class="nx">themeConfig</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sidebar</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;/why-learn-salesforce/&#34;</span><span class="o">:</span> <span class="nx">getSideBar</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;why-learn-salesforce&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Why Salesforce?&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">),</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;/admin-guide/&#34;</span><span class="o">:</span> <span class="nx">getSideBar</span><span class="p">(</span><span class="s2">&#34;admin-guide&#34;</span><span class="p">,</span> <span class="s2">&#34;Admin Certification Guide&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;/pd1-guide/&#34;</span><span class="o">:</span> <span class="nx">getSideBar</span><span class="p">(</span><span class="s2">&#34;pd1-guide&#34;</span><span class="p">,</span> <span class="s2">&#34;PD1 Certification Guide&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;/salesforce-for-students/&#34;</span><span class="o">:</span> <span class="nx">getSideBar</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;salesforce-for-students&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Salesforce for Students&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="c1">//...
</span></span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">getSideBar</span><span class="p">(</span><span class="nx">folder</span><span class="p">,</span> <span class="nx">title</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">extension</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&#34;.md&#34;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">files</span> <span class="o">=</span> <span class="nx">fs</span>
</span></span><span class="line"><span class="cl">    <span class="p">.</span><span class="nx">readdirSync</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="sb">`</span><span class="si">${</span><span class="nx">__dirname</span><span class="si">}</span><span class="sb">/../</span><span class="si">${</span><span class="nx">folder</span><span class="si">}</span><span class="sb">`</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">.</span><span class="nx">filter</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nx">item</span><span class="p">)</span> <span class="p">=&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nx">item</span><span class="p">.</span><span class="nx">toLowerCase</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">&#34;readme.md&#34;</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">        <span class="nx">fs</span><span class="p">.</span><span class="nx">statSync</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="sb">`</span><span class="si">${</span><span class="nx">__dirname</span><span class="si">}</span><span class="sb">/../</span><span class="si">${</span><span class="nx">folder</span><span class="si">}</span><span class="sb">`</span><span class="p">,</span> <span class="nx">item</span><span class="p">)).</span><span class="nx">isFile</span><span class="p">()</span> <span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl">        <span class="nx">extension</span><span class="p">.</span><span class="nx">includes</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">extname</span><span class="p">(</span><span class="nx">item</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="p">[{</span> <span class="nx">title</span><span class="o">:</span> <span class="nx">title</span><span class="p">,</span> <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="p">...</span><span class="nx">files</span><span class="p">]</span> <span class="p">}];</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>And voila, you have the brand new sidebar -</p>
<p><img loading="lazy" src="/misc/vuepress-sidebar-auto-generate-function.jpg" type="" alt="vuepress-sidebar-auto-generate-function"  /></p>
<p>You can see that -</p>
<ol>
<li>There&rsquo;s a distinct sidebar for each folder - first level links are the files within the folder</li>
<li>Links to <code>README</code> and other files are consistent</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>Using Vuepress and other stories</title>
      <link>https://techformist.com/using-vuepress/</link>
      <pubDate>Wed, 04 Dec 2019 18:30:00 +0000</pubDate>
      
      <guid>https://techformist.com/using-vuepress/</guid>
      <description>&lt;p&gt;I am a big fan of Vue and cannot breathe without static sites. So, it is only natural that I play around and implement Vue-based static sites for fun and profit.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a distilled-down version of my experience with &lt;a href=&#34;https://vuepress.vuejs.org/&#34;&gt;Vuepress&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;the-situation&#34;&gt;The Situation&lt;/h2&gt;
&lt;p&gt;I create static sites that are &amp;ldquo;real&amp;rdquo; websites. Typically the following factors in a static site generator help -&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A cool, easy-to-customise home page&lt;/li&gt;
&lt;li&gt;Themes/starter projects that make life easy&lt;/li&gt;
&lt;li&gt;Plugins that can extend functionality of core software&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Although I had played around Vuepress quite a bit, I always ended up choosing non-Vue technologies like Hugo, or Vue-based static site generators like Gridsome or Saber.land.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I am a big fan of Vue and cannot breathe without static sites. So, it is only natural that I play around and implement Vue-based static sites for fun and profit.</p>
<p>Here&rsquo;s a distilled-down version of my experience with <a href="https://vuepress.vuejs.org/">Vuepress</a>.</p>
<h2 id="the-situation">The Situation</h2>
<p>I create static sites that are &ldquo;real&rdquo; websites. Typically the following factors in a static site generator help -</p>
<ol>
<li>A cool, easy-to-customise home page</li>
<li>Themes/starter projects that make life easy</li>
<li>Plugins that can extend functionality of core software</li>
</ol>
<p>Although I had played around Vuepress quite a bit, I always ended up choosing non-Vue technologies like Hugo, or Vue-based static site generators like Gridsome or Saber.land.</p>
<p>More recently however, I decided to have this long drawn out project to create a free tutorial website. With great delight and big plans, I chose Vuepress.</p>
<p>This is that true story.</p>
<h2 id="what-exactly-is-vuepress">What exactly is Vuepress?</h2>
<p>A Vue-based static site generator, which is created by Evan Yu and supported by the Vue team. If that is not enough to get you going, there are other factors too. Read on.</p>
<p>Vuepress was created for documentation sites but has official themes/plugins to create a blog as well.</p>
<ul>
<li>Create documentation sites</li>
<li>Create full-scale websites (we will get back to this point)</li>
<li>Create blogs</li>
<li>Create eCommerce sites</li>
<li>Make sites interactive with the power of Vue</li>
</ul>
<p>Vuepress is simple, provides a standard experience, (kind of) easy to configure and easy to get started.</p>
<h2 id="getting-started-on-vuepress">Getting Started on Vuepress</h2>
<p>Create a project folder and install Vuepress.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl"><span class="k">mkdir</span> awedocs
</span></span><span class="line"><span class="cl"><span class="k">cd</span> awedocs
</span></span><span class="line"><span class="cl">yarn init
</span></span><span class="line"><span class="cl">yarn add -D vuepress
</span></span></code></pre></div><p>And then.. be prepared to act surprised - because there is nothing really there. There is little to see fresh out of the box. We need a few more steps to get there.</p>
<p>Open the <code>awedocs</code> folder in your VSCode. Create a sub directory called <code>docs</code> in the root folder. Then, create a file named <code>README.md</code> in <code>docs</code> folder. Enter following content in the file..</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="cl">Hello world
</span></span></code></pre></div><p><code>md</code> or markdown files will contain the content of your site. This file should be good for initial tests.</p>
<p>Open <code>package.json</code> and enter scripts to run Vuepress. Your entire file may look like below -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;awedocs&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;version&#34;</span><span class="p">:</span> <span class="s2">&#34;0.0.1&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;Awesome docs.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;scripts&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;dev&#34;</span><span class="p">:</span> <span class="s2">&#34;vuepress dev docs&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;build&#34;</span><span class="p">:</span> <span class="s2">&#34;vuepress build docs&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;main&#34;</span><span class="p">:</span> <span class="s2">&#34;index.js&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;repository&#34;</span><span class="p">:</span> <span class="s2">&#34;https://github.com/techformist/awedocs&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;author&#34;</span><span class="p">:</span> <span class="s2">&#34;Prashanth Krishnamurthy&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;license&#34;</span><span class="p">:</span> <span class="s2">&#34;MIT&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;devDependencies&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;vuepress&#34;</span><span class="p">:</span> <span class="s2">&#34;^1.2&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;dependencies&#34;</span><span class="p">:</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Go back to command prompt, and issue the command ..</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">yarn dev
</span></span></code></pre></div><p><img loading="lazy" src="/misc/vuepress-dev-start.png" type="" alt="vuepress-dev-start"  /></p>
<p>.. and ta da - you have your Vuepress site up and running.</p>
<p><img loading="lazy" src="/misc/default-site-vuepress.png" type="" alt="default-site-vuepress"  /></p>
<p>You can make a few smart observations -</p>
<ol>
<li>Vuepress is minimal (at least in the beginning)</li>
<li>Vuepress comes with a default theme</li>
<li>Content and presentation layer is well isolated with the presentation layer</li>
</ol>
<p>This means that -</p>
<ol>
<li>you can get started really really quickly. Install Vuepress -&gt; start creating documents / blog posts</li>
<li>you don&rsquo;t need to learn Vue/Vuepress to use Vuepress to create a documentation site or blog</li>
</ol>
<h2 id="making-vuepress-your-own">Making Vuepress your own</h2>
<p>The site generated so far is functional but too minimal. Let&rsquo;s add some jazz.</p>
<p>Update <code>README.md</code> with following content -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">home: true
</span></span><span class="line"><span class="cl">heroImage: /images/dog.jpg
</span></span><span class="line"><span class="cl">heroText: Awedocs
</span></span><span class="line"><span class="cl">tagline: docs. docs. docs.
</span></span><span class="line"><span class="cl">actionText: Get Started →
</span></span><span class="line"><span class="cl">actionLink: /more
</span></span><span class="line"><span class="cl">features:
</span></span><span class="line"><span class="cl">  <span class="k">-</span> title: Good
</span></span><span class="line"><span class="cl">    details: Know everything.
</span></span><span class="line"><span class="cl">  <span class="k">-</span> title: Better
</span></span><span class="line"><span class="cl">    details: Know something.
</span></span><span class="line"><span class="cl">  <span class="k">-</span> title: Best
</span></span><span class="line"><span class="cl">    details: Know nothing.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">footer: MIT Licensed
</span></span><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gh"># Hello world!
</span></span></span></code></pre></div><p>The content between <code>---</code> is called frontmatter. This tells Vuepress to mete out some special treatment to the file.</p>
<p>Now do two things to support above content -</p>
<ol>
<li>
<p>Add a file called <code>more.md</code> alongside <code>README.md</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="cl"><span class="gh"># Morrreee
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This is much more information than I can handle.
</span></span></code></pre></div></li>
<li>
<p>Create a new folder <code>/docs/.vuepress/images</code>. Save a sample image and name it <code>dog.jpg</code>.</p>
</li>
</ol>
<p>Stop Vuepress dev server. Start it again.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">yarn dev
</span></span></code></pre></div><p>You have something that resembles a typical website.</p>
<p><img loading="lazy" src="/misc/start-page-with-frontmatter-vuepress.png" type="" alt="start-page-with-frontmatter-vuepress"  /></p>
<p>The <code>/docs/.vuepress</code> folder will have any and all customisations for your Vuepress instance. This includes -</p>
<ul>
<li>Vue Components</li>
<li>Navigation bars</li>
<li>Additional Javascript</li>
<li>Styles</li>
</ul>
<p>Content stays in the <code>/docs</code> folder.</p>
<h2 id="add-more-ui-elements">Add more UI elements</h2>
<p>Lets add a sidebar and navbar.</p>
<p>Create a file called <code>/docs/.vuepress/config.js</code>, which will house all the configuration for Vuepress. Introduce following content in the file -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">base</span><span class="o">:</span> <span class="s2">&#34;/&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">title</span><span class="o">:</span> <span class="s2">&#34;awedocs&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nx">description</span><span class="o">:</span> <span class="s2">&#34;Awesome docs&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">themeConfig</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">label</span><span class="o">:</span> <span class="s2">&#34;English&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">editLinkText</span><span class="o">:</span> <span class="s2">&#34;Edit this page on GitHub&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">lastUpdated</span><span class="o">:</span> <span class="s2">&#34;Last Updated&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">nav</span><span class="o">:</span> <span class="nx">require</span><span class="p">(</span><span class="s2">&#34;./nav&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sidebar</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span> <span class="nx">title</span><span class="o">:</span> <span class="s2">&#34;Home&#34;</span><span class="p">,</span> <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;&#34;</span><span class="p">]</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">title</span><span class="o">:</span> <span class="s2">&#34;Misc&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s2">&#34;more&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nx">repo</span><span class="o">:</span> <span class="s2">&#34;techformist/awedocs&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">editLinks</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">plugins</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;@vuepress/back-to-top&#34;</span><span class="o">:</span> <span class="p">{},</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></div><p>Create a file called <code>.vuepress/nav.js</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">text</span><span class="o">:</span> <span class="s2">&#34;Let Me Google&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">link</span><span class="o">:</span> <span class="s2">&#34;https://google.com&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">text</span><span class="o">:</span> <span class="s2">&#34;About&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nx">items</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span> <span class="nx">text</span><span class="o">:</span> <span class="s2">&#34;About&#34;</span><span class="p">,</span> <span class="nx">link</span><span class="o">:</span> <span class="s2">&#34;/about&#34;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span> <span class="nx">text</span><span class="o">:</span> <span class="s2">&#34;Terms&#34;</span><span class="p">,</span> <span class="nx">link</span><span class="o">:</span> <span class="s2">&#34;/terms&#34;</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl"><span class="p">];</span>
</span></span></code></pre></div><p>Restart Vuepress to see this -</p>
<p><img loading="lazy" src="/misc/vuepress-site-navbar-sidebar.gif" type="" alt="vuepress-site-navbar-sidebar"  /></p>
<h2 id="build-and-deploy">Build and Deploy</h2>
<p>Once you are ready, you do a simple -</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">yarn build
</span></span></code></pre></div><p>This will create a <code>docs/.vuepress/dist</code> folder. Upload this folder to your host and you are done!</p>
<h2 id="what-could-i-do-next">What could I do next?</h2>
<p>Well, sky&rsquo;s the limit. Vuepress is based off Vue and Javascript - so you can do nothing short of magic.</p>
<p>There are a few things that can be highlighted here -</p>
<h3 id="1-add-simple-vue-components-and-interactivity">1. Add simple Vue components and interactivity</h3>
<p>We can include interactive components in markdown.</p>
<p>Create a Vue component called <code>AddNum.vue</code> in <code>docs/.vuepress/components/</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">label</span> <span class="na">for</span><span class="o">=</span><span class="s">&#34;a&#34;</span><span class="p">&gt;</span>Num 1<span class="p">&lt;/</span><span class="nt">label</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">input</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;a&#34;</span> <span class="na">v-model</span><span class="o">=</span><span class="s">&#34;a&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;number&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">label</span> <span class="na">for</span><span class="o">=</span><span class="s">&#34;b&#34;</span><span class="p">&gt;</span>Num 2<span class="p">&lt;/</span><span class="nt">label</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">input</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;a&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;number&#34;</span> <span class="na">v-model</span><span class="o">=</span><span class="s">&#34;b&#34;</span> <span class="na">align</span><span class="o">=</span><span class="s">&#34;right&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;font-weight:bold; margin-top:15px&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">label</span> <span class="na">for</span><span class="o">=</span><span class="s">&#34;sum&#34;</span><span class="p">&gt;</span>Sum =<span class="p">&lt;/</span><span class="nt">label</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">input</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;sum&#34;</span> <span class="na">type</span><span class="o">=</span><span class="s">&#34;number&#34;</span> <span class="na">:value</span><span class="o">=</span><span class="s">&#34;sum&#34;</span> <span class="na">align</span><span class="o">=</span><span class="s">&#34;right&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">export</span> <span class="k">default</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">data</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">a</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nx">b</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nx">computed</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">sum</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="o">+</span><span class="k">this</span><span class="p">.</span><span class="nx">a</span> <span class="o">+</span> <span class="o">+</span><span class="k">this</span><span class="p">.</span><span class="nx">b</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">style</span> <span class="na">lang</span><span class="o">=</span><span class="s">&#34;css&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="nt">input</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">text-align</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Include this component in <code>more.md</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="cl"><span class="gh"># Morrreee
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This is much more information than I can handle.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">But, I could do a sum for you.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;AddNum/&gt;
</span></span></code></pre></div><p>See the magic of adding numbers on the fly.</p>
<h3 id="create-even-more-complex-components">Create even more complex components</h3>
<p>Let us have a Vue gallery for our glorious site.</p>
<p>In the root folder do an install.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">yarn add vue-gallery
</span></span></code></pre></div><p>Create <code>/docs/.vuepress/Galleria.vue</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="c">&lt;!-- code from https://www.npmjs.com/package/vue-gallery --&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;padme&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">gallery</span> <span class="na">:images</span><span class="o">=</span><span class="s">&#34;images&#34;</span> <span class="na">:index</span><span class="o">=</span><span class="s">&#34;index&#34;</span> <span class="err">@</span><span class="na">close</span><span class="o">=</span><span class="s">&#34;index = null&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">gallery</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span>
</span></span><span class="line"><span class="cl">      <span class="na">class</span><span class="o">=</span><span class="s">&#34;image&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">v-for</span><span class="o">=</span><span class="s">&#34;(image, imageIndex) in images&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">:key</span><span class="o">=</span><span class="s">&#34;imageIndex&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="err">@</span><span class="na">click</span><span class="o">=</span><span class="s">&#34;index = imageIndex&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">:style</span><span class="o">=</span><span class="s">&#34;{
</span></span></span><span class="line"><span class="cl"><span class="s">        backgroundImage: &#39;url(&#39; + image + &#39;)&#39;,
</span></span></span><span class="line"><span class="cl"><span class="s">        width: &#39;300px&#39;,
</span></span></span><span class="line"><span class="cl"><span class="s">        height: &#39;200px&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">      }&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&gt;&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="kr">import</span> <span class="nx">VueGallery</span> <span class="nx">from</span> <span class="s2">&#34;vue-gallery&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kr">export</span> <span class="k">default</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">data</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nx">images</span><span class="o">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;https://dummyimage.com/800/ffffff/000000&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;https://dummyimage.com/1600/ffffff/000000&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;https://dummyimage.com/1280/000000/ffffff&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;https://dummyimage.com/400/000000/ffffff&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="p">],</span>
</span></span><span class="line"><span class="cl">        <span class="nx">index</span><span class="o">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">components</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">gallery</span><span class="o">:</span> <span class="nx">VueGallery</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">style</span> <span class="na">scoped</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">image</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">float</span><span class="p">:</span> <span class="k">clear</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">background-size</span><span class="p">:</span> <span class="kc">cover</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">background-repeat</span><span class="p">:</span> <span class="kc">no-repeat</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">background-position</span><span class="p">:</span> <span class="kc">center</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">border</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="mh">#ebebeb</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin</span><span class="p">:</span> <span class="mi">5</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">.</span><span class="nc">padme</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">padding-top</span><span class="p">:</span> <span class="mf">2.5</span><span class="kt">em</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">padding-bottom</span><span class="p">:</span> <span class="mf">2.5</span><span class="kt">em</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">style</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Include this component in our <code>more.md</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="cl"><span class="gh"># Morrreee
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This is much more information than I can handle.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Sum
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">But, I could do a sum for you.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;AddNum/&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Gallery
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Or, I could show a gallery. Click on the image to view full screen.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;Galleria/&gt;
</span></span></code></pre></div><p>You have a fully functioning gallery!</p>
<p>Note that we did not add this component anywhere other than creating a <code>vue</code> file, nor did we <code>use</code> the component.</p>
<h3 id="3-use-a-vue-plugin">3. Use a Vue plugin</h3>
<p>Since Vuepress has Vue behind the scenes, we could hop on to the same magic train for our own nefarious schemes.</p>
<p>Do yet another install.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">yarn add vue-typed-js
</span></span></code></pre></div><p>Create a new Vue file - <code>/docs/.vuepress/components/</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">vue-typed-js</span>
</span></span><span class="line"><span class="cl">      <span class="na">:strings</span><span class="o">=</span><span class="s">&#34;[
</span></span></span><span class="line"><span class="cl"><span class="s">        &#39;once&#39;,
</span></span></span><span class="line"><span class="cl"><span class="s">        &#39;twice&#39;,
</span></span></span><span class="line"><span class="cl"><span class="s">        &#39;thrice&#39;,
</span></span></span><span class="line"><span class="cl"><span class="s">        &#39;four times&#39;,
</span></span></span><span class="line"><span class="cl"><span class="s">        &#39;five times&#39;,
</span></span></span><span class="line"><span class="cl"><span class="s">        &#39;infinity&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">      ]&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="na">:loop</span><span class="o">=</span><span class="s">&#34;true&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="p">&lt;</span><span class="nt">h4</span> <span class="na">style</span><span class="o">=</span><span class="s">&#34;color:red&#34;</span><span class="p">&gt;</span>Going.. <span class="p">&lt;</span><span class="nt">span</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;typing&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;&lt;/</span><span class="nt">h4</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">vue-typed-js</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">template</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>Again, add this new component to our <code>more.md</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="cl"><span class="gh"># Morrreee
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This is much more information than I can handle.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Sum
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">But, I could do a sum for you.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;AddNum/&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Gallery
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Or, I could show a gallery. Click on the image to view full screen.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;Galleria/&gt;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## Typing Ahoy
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">I could even show this cool type simulator.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">&lt;TypeAhoy/&gt;
</span></span></code></pre></div><p>You now have some typing magic :)</p>
<p><img loading="lazy" src="/misc/vuepress-interactivity-vue-components.gif" type="" alt="vuepress-interactivity-vue-components"  /></p>
<h2 id="custom-themes-and-plugins">Custom themes and plugins</h2>
<p>So far you have seen themes provided by default in Vuepress. You can extend the theme or use a theme developed by third parties.</p>
<p>Similarly, you can develop custom functionality using plugins. Vuepress provides a number of core-team and community maintained plugins that do everything from enabling a blog on your site to creating a sitemap, creating diagrams using MermaidJS, or displaying your content as a presentation.</p>
<p>See themes and plugins listed on <a href="https://vuepress.tools/">Vuepress.tools</a>.</p>
<h2 id="that-was-easy-time-to-go-crazy">That was easy. Time to go crazy?</h2>
<p>Well, it depends. Vuepress has its positives and not-so-positives.</p>
<p>For starters -</p>
<ol>
<li>Vuepress is easy to get started with. It&rsquo;s out-of-box theme is great and anyone can get started in no time</li>
<li>Provides a great user experience (similar to a single page app)</li>
<li>It is easy to understand for non-techies. Provides a good isolation b/w content creation and presentation layers</li>
<li>Has the full power of Vue behind it - you can provide super interactivity using Vue components and plugins</li>
<li>Theming is quite strong</li>
<li>It has some good plugins. You can also roll out your own plugin quite easily</li>
</ol>
<p>On the other hand..</p>
<ol>
<li>Is not as flexible as more developer-friendly solutions like Gridsome. Yes, this is opinionated and YMMV</li>
<li>I struggled a bit to implement adhoc taxonomies</li>
<li>With dependency on Webpack, it does not lend itself well for lot of content</li>
<li>It has a big initial payload, which is increasingly viewed as something that we live with (but wanted to mention it anyway)</li>
</ol>
<p>Starting a documentation site and using a couple of plugins was easy enough, but my experience customising Vuepress was not that great (again, this is a &lsquo;me&rsquo; experience). I found Gridsome or Saber.land easier to understand and customise to my heart&rsquo;s content.</p>
<p>That said, I will probably use Vuetify for all the documentation sites going forward since it is quite simple and fast to get started with.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
