crossbow-cli

Combining the best bits of npm scripts, shell commands, gulp/grunt plugins + more

Usage no npm install needed!

<script type="module">
  import crossbowCli from 'https://cdn.skypack.dev/crossbow-cli';
</script>

README

Build Status

Crossbow CLI

Combining the best bits of npm scripts, shell commands, gulp/grunt plugins + more

Example: Crossbow allows mix'n'match of various systems, the following examples show this. In this example, we want to wipe a directory, rebuild some HTML and then minify the entire directory

  • clean a dir with a shell command
  • run a gulp plugin
  • run an npm script

crossbow.yaml

tasks:
  build:
    - clean
    - crossbow
    - htmlmin
  clean: '@shell rm -rf ./public'
  htmlmin: >
    @npm html-minifier
    --input-dir dist
    --output-dir dist
    --collapse-whitespace

Both clean and htmlmin are just scripts, where crossbow points to a file in the tasks directory.

var vfs = require('vinyl-fs');
var crossbow = require('crossbow');

module.exports = function (options) {
    return vfs.src(options.input)
        .pipe(crossbow.stream({
            config: options.config,
            data: options.data
        }))
        .pipe(vfs.dest(options.output));
};

** run **

crossbow run build

Advanced file-watching system

short-hand example

watch:
  # default is the name of the watcher group
  default:
    # patterns are colon separated keys
    # tasks are any valid Crossbow tasks
    './scss:_scss': ['sass', 'cssmin']
    '/src/*.hbs': ['@shell rm -rf dist', 'handlebars', 'htmlmin', 'manifest:dev']

long-form example

watch:
  default:
    # you can define watchers like this if 
    # you prefer for readability
    watchers:
      - patterns: ['./scss']
        tasks:    ['sass', 'cssmin']
      - patterns: ['/src/*.hbs']
        tasks:    ['handlebars', 'htmlmin', 'manifest']

tasks: 
    # Configure tasks as above

short-hand example with options

watch:
  default:
    # `Options` can be set per-watcher.
    # This is especially useful when some types of
    # files need debouncing, but others do not
    options:
      debounce: 2000
      usePolling: true
    # Short-hand syntax is also fine here
    './scss': ['sass', 'cssmin']
    '/src/*.hbs': ['handlebars', 'htmlmin', 'manifest']

short-hand example with options + before tasks

watch:
  default:
    options:
      debounce: 2000
      usePolling: true
    # Giving multiple 'before' tasks will ensure
    # that all are run + completed before any watchers 
    # begin. They can be task names, shell scripts, js files etc
    before:
      - '@shell rm -rf dist'
      - '@npm browser-sync start -s'
    './scss': ['sass', 'cssmin']
    '/src/*.hbs': ['handlebars', 'htmlmin', 'manifest']