cryogenian/mandragora-bucket


bunch of gulp tasks and npm dependencies for purescript-projects

License: Apache-2.0

Language: JavaScript


mandragora-bucket

Build Status

Dependencies

  • nodejs > 0.12
  • globally installed gulp

The purpose

mandragora-bucket provides bunch of gulp tasks that covers almost all needs of purescript project.

It can

  • build projects via psc or psc-make
  • bundle psc-maked or psced projects with browserify
  • test projects with karma and check coverage with istanbul
  • manage projects that have multiple entry points.
  • watch psc-make and karma builds
  • produce docs

How to use it

default directory structure

root
  - src/  -- Source code
  - test/ -- Tests code
  - dist/ -- temporary directory
    - node_modules -- symlinks to project node_modules/ and psc-maked src
    - entry-foo.js -- browserify entry one
    - entry-bar.js -- browserify entry two
    - test-main.js -- browserify test entry
  - bower_components/ 
  - node_modules/ 
  - MODULES.md -- generated docs
  - bower.json
  - package.json 

default config

{
  paths: {
    bower: [
      'bower_components/purescript-*/src/**/*.purs',
      'bower_components/purescript-*/purescript-*/src/**/*.purs'
    ],
    src: ['src/**/*.purs'],
    test: ['test/**/*.purs'],
    docs: {
      dest: 'MODULES.md'
    }
  },
  tmpDir: 'dist'
}
  • It takes paths.bower and paths.src to compile and watch in main tasks.
  • It takes paths.bower, paths.src and paths.test for test tasks.
  • gulp docs emits documentation to paths.docs.dest
  • Temporary directory is tmpDir

minimal user config

{
    entries: {
        "Main": {
            "name": "build",
            "dir": "public"
        }
    }
}

Merging this config with default will add tasks that compile module Main, bundle results (for psc-make) and put it to public directory.

multiple entries config

{
    "Entries.File": {
        "name": "file",
        "dir": "public"
    },
    "Entries.Notebook": {
        "name": "notebook",
        "dir": "public"
    }
}

This config will add tasks for both Entries.File and Entries.Notebook.

using it in gulpfile

var mandragora = require("mandragora-bucket"),
    gulp = require("gulp");

mandragora.config.entries = {
    "Entry": {
        "name": "result",
        "dir": "out"
    }
};

// use mandragora.config as default

mandragora(gulp);

// or provide config as second argument

mandragora(gulp, {
    paths: {
        bower: ["bower_components/purescript-*/src/**/*.purs"],
        src: ["my/src"],
        test: ["my/test"],
        docs: {dest: "OTHER.md"},
    },
    tmpDir: "tmp",
    entries: {
        "Main": {
            name: "result",
            dir: "out"
        }
    }
});

Produced tasks

Call to mandragora.define(gulp) or mandragor.define(gulp, config) will produce following tasks:

  • gulp bundle-test -- psc-make Test.Main entry and cover all file from src with istanbul
  • gulp karma -- run tests in karma
  • gulp cover -- run tests in karma and send statictics to coveralls
  • gulp watch-test -- watch test and project sources, recompile it by gulp bundle-test

For each of entry in config.entries i.e.

{
    "Foo.Bar": {
        "name": "baz",
        "dir": "out"
    }
}

suffix will be foo-bar

  • gulp make -- run psc-make
  • gulp entries -- make entry files for browserify
  • gulp psci -- produce .psci_modules for sources
  • gulp docs -- emit docs
  • gulp prod-suffix -- run psc
  • gulp bundle-suffix -- bundle this entry
  • gulp bundle-prod-suffix -- bundle psc result with it npm dependencies
  • gulp deploy-suffix -- compile via psc-make, bundle it, move to entry.dir as entry.name + ".js"
  • gulp deploy-prod-suffix -- compile via psc, bundle it, move to entry.dir as entry.name + ".js"
  • gulp watch-suffix -- run gulp deploy-suffix on source change
  • gulp bundle-prod -- compile all entries by psc and then bundle it

Notes

  • Tasks for testing will cause exception if there is no Test.Main module.
  • gulp deploy-prod should run after gulp bundle-prod and move all its results to target directories. It doesn't.

Project Statistics

Sourcerank 3
Repository Size 270 KB
Stars 1
Forks 0
Watchers 1
Open issues 0
Dependencies 24
Contributors 4
Tags 0
Created
Last updated
Last pushed

Top Contributors See all

Maxim Zimaliev Gary Burgess John A. De Goes Brian McKenna

Something wrong with this page? Make a suggestion

Last synced: 2016-12-29 04:21:27 UTC

Login to resync this repository