Fast, good-enough concatenation with source maps.

Usage no npm install needed!

<script type="module">
  import broccoliConcat from '';


Broccoli concatenator that generates & propagates sourcemaps

Build Status Build status

This filter is designed to be fast & good enough. It can generates source maps substantially faster than you'll get via mozilla/source-map, because it's special-cased for straight line-to-line contenation.

It discovers input sourcemaps in relative URLs, including data URIs.


const node = concat(node);

Advanced Usage

const node = concat(node, {
  outputFile: '/output.js',
  header: ";(function() {",
  headerFiles: ['loader.js'],
  inputFiles: ['**/*'],
  footerFiles: ['auto-start.js'],
  footer: "}());",
  sourceMapConfig: { enabled: true },
  allowNone: false | true // defaults to false, and will error if trying to concat but no files are found.

The structure of output.js will be as follows:

// - header
// - ordered content of the files in headerFiles
// - un-ordered content of files matched by inputFiles, but not in headerFiles or footerFiles
// - ordered content of the files in footerFiles
// - footer

Debug Usage

note: this is intended for debugging purposes only, and will most likely negatively affect your build performace is left enabled

Setting the environment variable CONCAT_STATS=true will result a summary of each concatention being output to process.cwd() + 'concat-stats-for/*.json'

Each file within that directory represents a different contenation, and will contain:

  • outputFile – the output file that was created
  • sizes – a summary of each input file, and the associated pre-minified pre-gziped byte size.

Want more details? like uglified or compressed sizes? (or have more ideas) go checkout:



  "outputFile": "path/to/output/File",
  "sizes": {
    "a.js": 5,
    "b.js": 10,

other files:

  • concat-stats-for/-file/a.js
  • concat-stats-for/-file/b.js