broccoli-merge-files
Merge multiple trees of files into one or multiple files with a user-provided
merge function.
Installation
yarn add -D broccoli-merge-files
Usage
const BroccoliMergeFiles = require('broccoli-merge-files');
const mergedNode = new BroccoliMerge(inputNodes, {
merge: entries => JSON.stringify(Object.fromEntries(entries))
});
inputNodes
: An array of nodes, whose contents will be mergedoptions
: A hash of options
Options
outputFileName?: string
: Optional output file name, if merge
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 a string
or Buffer
. - If it is not set, expected to return an array or output files, like:
[fileName, contents][]
, where fileName
is a string
and contents
is a
string
or Buffer
.
sort
:
true
(default): Sort in order of input nodes and then relative file
path.false
: Skip any sorting. Must not be used in conjunction with
DuplicateStrategy.KeepFirst
or DuplicateStrategy.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 to merge
.
async transformFile?(path: string, contents: string | Buffer): any
(optional): Lets you transform every file before passing it to merge
.patterns?: string | string[]
: Glob patterns for
fast-glob
.globOptions?: object
: Glob options for
fast-glob
.encoding?: string = 'utf8'
: The encoding to use when reading and writing
files.annotation?: string
: A note to help tell multiple plugin instances apart.
Related projects
-
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-flatiron
— Takes in a single input tree and merges all input files into a single JS
module. You can do the same thing with broccoli-merge-files
as well:
new BroccoliMerge([inputNode], {
merge: entries =>
`export default ${JSON.stringify(Object.fromEntries(entries))};`,
outputFile: 'files.js'
});