Setting Up Component Library Documentation with VitePress
When our component library is complete, a detailed usage document is indispensable. This article will introduce how to quickly build a component library documentation site with VitePress and deploy it to GitHub.
Installation
Firstly, create 'site' folder, execute pnpm init
, and then install vitepress
and vue
.
pnpm install -D vitepress vue
After the installation is complete, create docs/index.md
file.
# Hello StellarNovaUI
Then, add new scripts command in the package.json
.
"scripts": {
"docs:dev": "vitepress dev docs",
"docs:build": "vitepress build docs",
"docs:preview": "vitepress preview docs"
},
Execute pnpm run docs:dev
.
Navigation Bar Configuration
Create config.js
in the docs/.vitepress
directory.
export default {
title: 'StellarNovaUI',
base: process.env.NODE_ENV === 'production' ? '/stellarnovaui/' : '/',
themeConfig: {
nav: [{ text: 'Document', link: '/guide/introduce' }],
sidebar: {
'/': [
{
text: 'Introduction',
items: [
{
text: 'Introduce',
link: '/guide/introduce'
},
{
text: 'Quick Start',
link: '/guide/quickstart'
}
]
},
{
text: 'Development',
items: [
{
text: 'Directory Structure',
link: '/develop/'
},
{
text: 'Component Development',
link: '/develop/component'
},
{
text: 'Global Components',
link: '/develop/global'
},
{
text: 'Build and Deploy',
link: '/develop/build'
}
]
},
{
text: 'Components',
items: [
{
text: 'Button',
link: '/components/button/'
},
]
}
]
},
socialLinks: [{ icon: 'github', link: 'https://github.com/markliu2013/stellarnovaui' }]
}
};
we add two navigation bars and a GitHub address. Restart the project and you can see that the navigation bar.
However, clicking on 'Guide' and 'Components' results is 404 error, because we have not yet created these directories and files. Therefore, we need to create guide/index.md and components/button/index.md in the docs directory. Click again to navigate to the corresponding page.
Import Component Library
Since we are building a component library documentation site, we definitely need to import our component library. Here, we also import the local component library, so we add a 'site' directory in the pnpm
workspace pnpm-workspace.yaml
.
packages:
- "packages/**"
- "play"
- "site"
Then under the 'site' directory, install stellarnovaui
with pnpm add stellarnovaui
, and create theme/index.js
in the docs
directory to import our component library.
import DefaultTheme from "vitepress/theme";
import stellarnovaui from "stellarnovaui"
export default {
...DefaultTheme,
enhanceApp: async ({ app }) => {
// app is the Vue 3 app instance from `createApp()`. router is VitePress'
// custom router. `siteData`` is a `ref`` of current site-level metadata.
app.use(stellarnovaui);
},
};
```
Go back to `components/button/index.md` and try using our button component directly.
```markdown
## Button
<sn-button>Default Button</sn-button>
<sn-button type="primary">Default Button</sn-button>
```
You can see that our component is now working.
At the same time, we can also add code to display the effect, such as changing `button/index.md` to:
```markdown
## Button
<sn-button>Default Button</sn-button>
<sn-button type="primary">Default Button</sn-button>
::: details Show Code
```html
<sn-button>Default Button</sn-button> <sn-button type="primary">Default Button</sn-button>
```
:::
```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/llt2y7714o2cygfq0hke.png)
## Deploy
After the packaging is complete, you can deploy it to your own server, or you can choose to deploy it to a GitHub site. Here, I will introduce how to deploy it to a GitHub site.
Firstly, create a new organization called 'stellarnovaui', then create a new repository called 'stellarnovaui' under the organization.
Then commit the `site/docs/.vitepress/dist` to this repository.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yju9riuoeh0pwx1v1myz.png)
Click on 'settings', select the branch and directory to deploy, here it's the root directory, and save it.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mx7olkrske24o6nen1r7.png)
In the end, the address to access our site is `stellarnovaui.github.io/stellarnovaui/`, so when packaging, the `base` in `site/docs/.vitepress/config.js` should be `/stellarnovaui/`.
```javascript
export default {
title: 'StellarNovaUI',
base: process.env.NODE_ENV === 'production' ? '/stellarnovaui/' : '/',
...
}
```
After completing the above steps, you can visit our site. The site updates in real time, any changes to your repository will be reflected on the site.
Note: If you encounter a 404 error when visiting, it may be that your `base` configuration is incorrect.
The final source code: https://github.com/markliu2013/StellarNovaUI
Top comments (2)
Hey Mark, I'm looking for people to give early feedback on a tool for Vue component documentation. You seem like someone that would be interested.
If you have any suggestions, let me know. If you put it in a GitHub Issue, I'll see it immediately.
Really awesome series! I didn't think about using VitePress for that. What are the advantages compared to, for example, using Storybook?