npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

grunt-jsdox

v0.1.7

Published

Recursively generates markdown files for your project, using the jsDox parser. Optionally generates a table of contents, and supports git

Downloads

67

Readme

grunt-jsdox

Recursively generates markdown files for your project, using the jsDox parser. Optionally generates a table of contents, and supports git

Getting Started

This plugin requires Grunt ~0.4.2

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-jsdox --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-jsdox');

The "jsdox" task

Overview

The grunt-jsdox plugin will recursively generate markdown documentation for all the src paths defined using the jsDox module, outputting to the configured dest.

If contentsEnabled is true, a table of contents will also be generated with links to all of the files documented, sorted and grouped by the containing folder.

If configured, you can also publish the output of the documentation generation task to a remote git repo using the publish task. This is useful for auto-publishing the documentation for a project, for ex. to your github/bitbucket wiki, as part of the grunt build process.

In your project's Gruntfile, add a section named jsdox to the data object passed into grunt.initConfig().

Full Configuration (defines each option)

grunt.initConfig({
  jsdox: {
    generate: {
      options: {
        contentsEnabled: true,
        contentsTitle: 'Example Documentation',
        contentsFile: 'readme.md',
        pathFilter: /^example/,
        templateDir: 'path/to/my/mustache'
      },

      src: ['path/to/code'],
      dest: 'path/to/output'
    },

    [optional additional "generation" task like generate above, can be targed with jsdox:generate-other-docs],

    publish: {
      enabled: true,
      path: '<%= jsdox.generate.dest %>',
      message: 'Markdown Auto-Generated for version <%= pkg.version %>',
      remoteName: 'upstream'
      remoteBranch: 'master'
    }
  }
});

Minimal Configuration (falls back on defaults)

grunt.initConfig({
  jsdox: {
    generate: {
      options: {
        contentsTitle: 'My Project Documentation',
      },

      src: ['path/to/code'],
      dest: 'path/to/output'
    }
  }
});

Options

Generation Task Options

contentsEnabled

Type: Boolean Default value: true

When true, the table of contents file (readme.md by default) is generated at the dest root

contentsTitle

Type: String Default value: Documentation

The title of the table of contents file

contentsFile

Type: String Default value: readme.md

The name of the table of contents file that is generated

pathFilter

Type: RegExp

If defined, will filter the final path for each file generated. Ex, if the src included the following path containing moduleA, /path/to/code, then the path to moduleA in the table of contents will be path/to/code/moduleA. If a filterPath of /path\/to/ is defined, then the path to moduleA in the table of contents will be code/moduleA. This helps avoid unnecessary deep paths, if the code being documented is buried.

templateDir

Type: String

The directory containing your custom mustache templates to override JSDox's default styles. See JSDox's templates/ directory for the list of mustache templates you can override.

src

Type: Array

An array of paths to the documents who's folder should be included in the documentation generation

dest

Type: String

The destination path for the generated documentation

Publish Task Options

enabled

Type: Boolean Default value: false

When true, publishing to a remote git repo is enabled

path

Type: String

The path from the cwd to the git repository that will be published

message

Type: String

The commit message used when git commit is called

remoteName

Type: String

The remote name of the git repository we are publishing to. This would be one of the names displayed when git remote -v show is run.

remoteBranch

Type: String

The name of the branch that we are publishing to, within the remoteName repository.

Usage Examples

Documentation generation

Here's a basic example of generating documentation for all the code in a project. This would produce a tables of contents called readme.md, and a folder called lib containing the documentation (and any subfolders):

GruntFile

jsdox: {
  generate: {
    options: {
      contentsTitle: 'My Project API Documentation',
    },

    src: ['lib/**/*.js'],
    dest: 'docs/markdown'
  }
}

Run the task

grunt jsdox:generate

Publishing to a git repo

Before running the publish task, a git repository with a remote must already be configured; all this thing does it run git commands, specifically in the following order:

  1. git add .
  2. git commit -m
  3. git push

This example assumes your github/bitbucket/whatever wiki is located in a docs/markdown subfolder. In a real-world situation, your nested documentation folder may also be a git repo, so running git commands against it require targetting that repo directly (otherwise git will target the parent repo). For example, running a simple git add . against a nested repo looks like:

git --git-dir=docs/markdown/.git --work-tree=docs/markdown add .

grunt-jsdox makes this assumption by default, so --git-dir and --work-tree are automatically set to dest when running the publish task. Next, if a remote isn't configured already (run git remote -v show to see whats there), you need to configure one before continuing:

git remote add <name> <git repo url>

ex:
git remote add upstream https://github.com/yourname/yourrepo.wiki.git

GruntFile

jsdox: {
  generate: {
    options: {
      contentsTitle: 'My Project API Documentation',
    },

    src: ['lib/**/*.js'],
    dest: 'docs/markdown'
  },

  publish: {
    enabled: true,
    path: '<%= jsdox.generate.dest %>',
    message: 'Markdown Auto-Generated for version <%= pkg.version %>',
    remoteName: 'upstream'
  }
}

...

//define a custom task to clean, generate, then publish
grunt.registerTask('generate-docs', ['clean:docs', 'jsdox:generate', 'jsdox:publish']);

Run the task

grunt generate-docs

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.

Release History

(Nothing yet)