Annotating JavaScript using JSDoc tags
JSDoc is a markup language used to annotate JavaScript, comments containing JSDoc tags can be used to produce HTML documentation and for declaring the type of a variable.
In this post we'll install JSDoc, look at some example markup and then generate some documentation.
Note: If you want to follow along then download and install the Vardyger publishing platform.
Install JSDoc
To install JSDoc, enter the following command:
npm install -g jsdoc
This will install JSDoc globally by placing modules in /usr/local/lib/node_modules
:
and the executable file in /usr/local/bin
.
Configure JSDoc
We've installed JSDoc globally, so to override the default configuration we need to place a file named conf.json
in our working directory:
{
"tags": {
"allowUnknownTags": true
},
"source": {
"includePattern": ".+\\.js(doc)?$",
"excludePattern": "(^|\\/|\\\\)_"
},
"plugins": [],
"templates": {
"cleverLinks": false,
"monospaceLinks": false,
"default": {
"outputSourceFiles": true
}
}
}
Note: JSDoc includes a sample configuration file named conf.json.EXAMPLE
.
The Vardyger file structure:
├── /content
├── /core
└── /client
└── /server
└── /api
└── /controllers
├── posts.js
...
└── /out [JSDoc output]
├── server.js
├── conf.json
...
└── /shared
JSDoc Tags
I've already added some JSDoc tags to the posts.js
controller:
/**
* findPostById
*
* returns a post in the Posts collection.
*
* @public
* @param {req} req - The HTTP request object.
* @param {res} res - The HTTP response object.
* @return {post} post - A post from the Posts collection.
* @see {@link http://expressjs.com/api.html#req}
* @see {@link http://expressjs.com/api.html#res}
*/
Now, we can try it out from the command line:
jsdoc ./api/controllers/posts.js
And, preview the generated HTML documentation in a browser:
You might also like to take a look at Docstrap and the JSDoc plugins for Grunt and Gulp.
References:
- stackoverflow: How to describe “object” arguments in jsdoc?
- WebStorm Help: Creating JSDoc Comments
- Google Developers: Annotating JavaScript for the Closure Compiler