node package manager

grunt-captain

grunt-captain

Static site generator for prototyping front-end projects

How it works

Captain uses Swig as a template engine and adds some SSG functionality. You can pass data to the template from global grunt config.

{% set data = {
    title: 'Homepage',
    homepage: true
} %}
 
<h1>{{ data.title }}</h1>
{% if data.homepage %}
<p>This is homepage</p>
{% endif %}

More about swig templates in documentation.

Utils

Util Object is injected into all templates.

$.pages

Type: Array

List of all pages path.

<ul>
    {% for path in $.pages %}
    <li><a href="{{path}}">{{path}}</a></li>
    {% endfor %}
</ul>

Getting Started

This plugin requires Grunt.

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-captain --save-dev

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

grunt.loadNpmTasks('grunt-captain');

The "captain" task

Run this task with the grunt captain command.

Task targets, files and options may be specified according to the grunt Configuring tasks guide.

Options

data

Type: Object Default: {}

A global data object which is passed to all page templates.

Usage Examples

Default Options

In this example, .swig templates from tpl/page/ are compiled to .html files.

grunt.initConfig({
  captain: {
    compile: {
      files: [{
        expand: true, // Enable dynamic expansion. 
        cwd: 'tpl/page/', // Src matches are relative to this path. 
        src: ['*.swig'], // Actual pattern(s) to match. 
        dest: 'www/', // Destination path prefix. 
        ext: '.html', // Dest filepaths will have this extension. 
        extDot: 'first' // Extensions in filenames begin after the first dot 
      }]
    }
  }
})

Custom Options

In this example, we set global data option env.dev for differences between production and development build.

grunt.initConfig({
  captain: {
    compile: {
        options: {
          data: {
              env: {
                  dev: true
              }
          }
        },
        files: [{
          expand: true, // Enable dynamic expansion. 
          cwd: 'tpl/page/', // Src matches are relative to this path. 
          src: ['*.swig'], // Actual pattern(s) to match. 
          dest: 'www/', // Destination path prefix. 
          ext: '.html', // Dest filepaths will have this extension. 
          extDot: 'first' // Extensions in filenames begin after the first dot 
        }]
    }
  }
})

Release History

  • 2015-06-19 1.0.0 Rewrite data parsing to swig internal set tag.
  • 2015-05-19 0.2.0 added util ($) object with prefilled $.pages Array to all templates, remove caching (for watchers)
  • 2015-05-15 0.1.1 replace lodash dependency with lodash.merge

Task submitted by Jan Panschab

License

Copyright (c) 2015 Actum. Licensed under the MIT license.