Merge multiple trees of files into one or multiple files with a user-provided merge function.
yarn add -D broccoli-merge-files
const { BroccoliMergeFiles } = require('broccoli-merge-files');
const mergedNode = new BroccoliMergeFiles(inputNodes, {
merge: entries => JSON.stringify(Object.fromEntries(entries))
});
inputNodes
: An array of nodes, whose contents will be mergedoptions
: A hash of options
outputFileName?: string
: Optional output file name, ifmerge
returns just the file singular file contents.async merge(files: [fileName, contents][])
: Called with an array of all files to be merged.- If
outputFileName
is set, expected to return astring
orBuffer
. - If it is not set, expected to return an array or output files, like:
[fileName, contents][]
, wherefileName
is astring
andcontents
is astring
orBuffer
.
- If
sort
:true
(default): Sort in order of input nodes and then relative file path.false
: Skip any sorting. Must not be used in conjunction withDuplicateStrategy.KeepFirst
orDuplicateStrategy.KeepLast
.(a: Entry, b: Entry) => number
: Compare function that gets passed two entries. Basically what you would pass to[].sort()
.
duplicates
: If multiple input nodes contain a file with the same relative file path...'prohibit'
(default): an error will be thrown and the pipeline crashes.'keep-first'
: the file from the first input node containing it is kept.'keep-last'
: the file from the last input node containing it is kept.'keep-all'
: all files will be passed through tomerge
.
async transformFile?(path: string, contents: string | Buffer): any
(optional): Lets you transform every file before passing it tomerge
.patterns?: string | string[]
: Glob patterns forfast-glob
.globOptions?: object
: Glob options forfast-glob
.encoding?: string = 'utf8'
: The encoding to use when reading and writing files.annotation?: string
: A note to help tell multiple plugin instances apart.
-
broccoli-merge-trees
— Copies multiple trees of files on top of each other, resulting in a single merged tree. Does not merge any individual files. -
broccoli-multifilter
— A mix ofbroccoli-filter
andbroccoli-merge-files
. If you can provide a declarative, static m-to-n file mapping up front, use this plugin instead, since it allows better caching. -
broccoli-flatiron
— Takes in a single input tree and merges all input files into a single JS module. Since this plugin is deprecated and not maintained any more,broccoli-merge-files
includes a compatibility util to do the same thing:const { BroccoliMergeFiles } = require('broccoli-merge-files'); const flatiron = require('broccoli-merge-files/flatiron'); new BroccoliMergeFiles([inputNode], { merge: files => flatiron(files, { // trimExtensions: false, // prefix: 'export default ', // suffix: ';' }), outputFileName: 'files.js' });