cogs
Version:
The fast file transform pipeline.
131 lines (101 loc) • 3.47 kB
Markdown
# 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
```bash
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 `require`ing the file returns the config object. Here's an
example in JavaScript:
```js
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](https://github.com/search?q=cogs-transformer&type=Repositories)
## Develop
```bash
git clone git.com:caseywebdev/cogs
cd cogs
npm install
bin/watch-test
```