URL: https://www.progressiverobot.com/vuejs-propdoc-document-components/

Every developer wants to read good documentation. Every developer wants to write good documentation. Few developers actually do. Let's take a look at a really simple way to both generate documentation for your Vue.js components and render it as well with propdoc.

Installation

document illustration for: Installation

Install <^>propdoc<^> like any other Vue plugin: via Yarn or NPM.

				
					
# Yarn

$ yarn add propdoc



# NPM

$ npm install propdoc --save

				
			

Documenting Components

The biggest feature of <^>propdoc<^> is the ability to write your documentation as properties on components. These are only used if you use <^>propdoc<^> to render the documentation. Otherwise they have no effect. It's a genius idea that I'm surprised doesn't seem to have been done before.

				
					
[label MyButton.vue]

&lt;template&gt;

  &lt;div class="my-button" :class="{

    flat: isFlat,

    raised: isRaised,

    primary: isPrimary

  }"&gt;

    &lt;slot&gt;&lt;/slot&gt;

  &lt;/div&gt;

&lt;/template&gt;



&lt;script&gt;



export default {

  name: "my-button",

  introduction: "A basic example button.",

  description: "A basic button with the ability to be flat, raised, or be a primary button. Nothing super special. (I stink at writing documentation.)",

  token: `&lt;my-button isFlat isPrimary&gt;Button Text&lt;/my-button&gt;`,



  props: {

    isFlat: {

      type: Boolean,

      default: false,

      note: 'Whether or not to use the flat version of the button. (No gradient or outline.)'

    },



    isRaised: {

      type: Boolean,

      default: true,

      note: 'Whether or not to use the raised version of the button. (Has a drop shadow.)'

    },



    isPrimary: {

      type: Boolean,

      default: false,

      note: 'Whether or not to use the primary coloring.'

    }

  }

}



&lt;/script&gt;

				
			

Along with the usual built-in keys like <^>name<^> and <^>required<^> on the component and props, <^>propdoc<^> adds a few more:

  • note: Tells what a prop does.
  • introduction: A quick introduction to a component.
  • description: A detailed description of the component. Supports Markdown.
  • token: A bit of code demonstrating how to use the component.

Rendering Documentation

It's nice and easy to render out the documentation for your component too. Just add the <^>propDoc<^> component and pass your documented component to it in the <^>component<^> prop.

				
					
[label DocumentationComponent.vue]

&lt;template&gt;

  &lt;div&gt;

    &lt;!-- Render the documentation for MyButton --&gt;

    &lt;prop-doc :component="MyButton"&gt;&lt;/prop-doc&gt;

  &lt;/div&gt;

&lt;/template&gt;



&lt;script&gt;

import propDoc from 'propdoc';

import MyButton from './MyButton.vue';



export default {

  components: {

    propDoc

  },



  data() {

    return {

      MyButton

    }

  }

}

&lt;/script&gt;