https://github.com/buschtoens/broccoli-merge-files
Broccoli plugin to merge multiple files into one or multiple files
https://github.com/buschtoens/broccoli-merge-files
broccoli broccoli-plugin
Last synced: about 1 month ago
JSON representation
Broccoli plugin to merge multiple files into one or multiple files
- Host: GitHub
- URL: https://github.com/buschtoens/broccoli-merge-files
- Owner: buschtoens
- Created: 2019-02-01T15:00:50.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-04-10T22:21:05.000Z (about 1 year ago)
- Last Synced: 2024-10-09T12:41:38.480Z (8 months ago)
- Topics: broccoli, broccoli-plugin
- Language: TypeScript
- Size: 683 KB
- Stars: 0
- Watchers: 3
- Forks: 1
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# broccoli-merge-files
[](https://travis-ci.org/buschtoens/broccoli-merge-files)
[](http://badge.fury.io/js/broccoli-merge-files)
[](http://badge.fury.io/js/broccoli-merge-files)
[](https://travis-ci.org/buschtoens/broccoli-merge-files)
[](https://github.com/prettier/prettier)
[](https://david-dm.org/buschtoens/broccoli-merge-files)
[](https://david-dm.org/buschtoens/broccoli-merge-files)Merge multiple trees of files into one or multiple files with a user-provided
merge function.## Installation
```bash
yarn add -D broccoli-merge-files
```## Usage
```ts
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 merged
- **`options`**: 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`](https://github.com/mrmlnc/fast-glob/#patterns).
- **`globOptions?: object`**: Glob options for
[`fast-glob`](https://github.com/mrmlnc/fast-glob/#options-1).
- **`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`](https://github.com/broccolijs/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`](https://github.com/broccolijs/broccoli-multifilter)**
— A mix of [`broccoli-filter`](https://github.com/broccolijs/broccoli-filter) and
`broccoli-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`](https://github.com/buschtoens/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:```js
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'
});
```