Sprockets-style script concatenation for Node
CoffeeScript CSS JavaScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
docs
lib
src
test
.gitignore
.travis.yml
Cakefile
README.mdown
package.json

README.mdown

Snockets

Build Status

A JavaScript/CoffeeScript concatenation tool for Node.js inspired by Sprockets. Used by connect-assets to create a Rails 3.1-style asset pipeline.

Written in CoffeeScript by the author of CoffeeScript: Accelerated JavaScript Development.

The state of the package

As of May 1st, 2013, @pthrasher became the maintainer of this package. It was taken over from @TrevorBurnham. I'm currently working on a 2.0.0 release that will be complete by the end of May. Main changes/features:

  • Source-map support
  • Move tests from node-unit over to jasmine.
  • Break out pieces into separate files.
  • More tests
  • More documentation

You can track my progress on these tasks via Pull Request #43

Usage (script-side)

In your CoffeeScript files, write Sprockets-style comments to indicate dependencies, e.g.

#= require dependency

(or //= require dependency in JavaScript). If you want to bring in a whole folder of scripts, use

#= require_tree dir

Usage (Node-side)

First,

npm install snockets

Then in your app:

Snockets = require 'snockets'
snockets = new Snockets()

Each Snockets instance has a depGraph property, an instance of dep-graph. You can scan a file to just update the dependency graph:

snockets.scan 'dir/foo.coffee', (err, depGraph) -> ...

To get a list of filenames showing the series of dependencies the scanned file has, you'd use depGraph.getChain 'dir/foo.coffee'.

You can get a list of compiled JavaScripts corresponding to the dependency chain (starting from the first required file to the requested file) using getCompiledChain:

snockets.getCompiledChain 'dir/foo.coffee', (err, jsList) -> ...

The result is in the format [{filename: "dependency1.js", js: "// code"}, ...]. Note that those JavaScript files are not actually created by getCompiledChain.

Snockets can also provide a single compiled, concatenated file (optionally run through UglifyJS if the minify option is passed in):

snockets.getConcatenation 'dir/foo.coffee', minify: true, (err, js) -> ...

Note that you don't need to scan before or after running getCompiledChain or getConcatenation; they update the dependency graph the same way that scan does.

Synchronous mode

By default, Snockets uses only async file methods. You can pass the option async: false to either of its methods if you want it to be synchronous instead. In synchronous mode, you can use either callbacks or return values, e.g.

js = snockets.getConcatenation 'dir/foo.coffee', async: false