https://github.com/caseywebdev/cogs
The fast file transform pipeline.
https://github.com/caseywebdev/cogs
Last synced: 4 months ago
JSON representation
The fast file transform pipeline.
- Host: GitHub
- URL: https://github.com/caseywebdev/cogs
- Owner: caseywebdev
- License: mit
- Created: 2012-07-18T05:37:06.000Z (almost 14 years ago)
- Default Branch: main
- Last Pushed: 2025-08-09T19:33:44.000Z (11 months ago)
- Last Synced: 2025-10-21T23:11:22.959Z (9 months ago)
- Language: JavaScript
- Homepage:
- Size: 769 KB
- Stars: 31
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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@github.com:caseywebdev/cogs
cd cogs
npm install
bin/watch-test
```