The fast file transform pipeline.


License
MIT
Install
npm install cogs@4.8.3

Documentation

Cogs

The fast file transform pipeline.

George Jetson's workweek is typical of his era: an hour a day, two days a week. His boss is Cosmo Spacely, the diminutive yet bombastic owner of Spacely Space Sprockets. Spacely has a competitor, H. G. Cogswell, owner of the rival company Cogswell Cogs (sometimes known as Cogswell's Cosmic Cogs).

Install

npm install cogs

Usage

Cogs leverages a simple command line interface paired with a powerful declarative config file.

Usage: cogs [options]

The fast file transform pipeline.


Options:

  -V, --version             output the version number
  -c, --config-path [path]  load config from [path] (default: cogs.js)
  -d, --debounce [seconds]  trigger a build at most every [seconds] seconds (default: 0.1)
  -w, --watch-paths [path]  rebuild if [path] changes, can be specified multiple times
  -p, --use-polling         use stat polling instead of fsevents when watching
  -s, --silent              do not output build information, only errors
  -h, --help                output usage information

Config

Every good project needs a Cogs config file. This file can be JavaScript or JSON, as long as requireing the file returns the config object. Here's an example in JavaScript:

export default {

  // Define the transformer pipeline here.
  transformers: [
    {
      // This is the name of the transformer to use for this piece of the
      // pipeline. It can be shorthand like this, or the fully-qualified package
      // name like 'cogs-transformer-babel'.
      name: 'babel',

      // The "only" key can be used to define a glob or array of globs, one of
      // which must be matched for the file to go through this transformer.
      only: 'src/**/*.js',

      // "except" is the opposite of only. Paths that match these globs will not
      // go through the transformer.
      except: [
        'src/some/outlier/file.js',
        'src/more/outliers/**/*.js'
      ],

      // "options" will be passed directly to the transformer.
      options: {
        presets: ['stage-0', 'es2015', 'react']
      }
    },

    // Impromptu transformers are as easy as specifying a function.
    {
      fn: ({file: {buffer}, options}) => ({buffer: Buffer.from(`${buffer}!`)),
      only: '**/*.exciting'
    },

    // Some other examples...
    {
      name: 'uglify-js',
      only: '**/*.js',
      except: '**/*+(-|_|.)min.js'
    },
    {
      name: 'sass',
      only: 'src/**/*.scss'
    },
    {
      name: 'clean-css',
      only: '**/*.+(css|scss)'
    }
  ],

  // Define source globs and targets here. This is where you define what to
  // transform and where it should go.
  builds: {
    'src/index.es6': {base: 'src', dir: 'public'},

    'src/public/**/*': {base: 'src/public', dir: 'public'},

    // Save to public dir and rename .es6 files to .js and .scss files to .css
    'src/foo/**/*': {
      base: 'src',
      dir: 'public',
      ext: {
        '.es6': '.js',
        '.scss': '.css'
      }
    }
  }
};

Transformers

Transformers are generally node modules that can be downloaded from npm. Alternatively, you can create your own transformers for your projects and reference them in the transformers array.

Here are some transformers to get you started

Develop

git clone git@github.com:caseywebdev/cogs
cd cogs
npm install
bin/watch-test