Sprockets-style script concatenation for Node
CoffeeScript CSS JavaScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



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)


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