Files
Henry Whitaker ea5808047f Tweaked gitignore
gitignore removed all composer and npm files, so automated builds would fail
2020-04-12 21:24:03 +01:00

209 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# babel-merge
`babel-merge` merges multiple Babel configuration objects into a single copy.
Plugin and preset objects and arrays will be merged together.
[![NPM version][npm-image]][npm-url] [![NPM downloads][npm-downloads]][npm-url]
_Note: **options** to plugins and presets **will not be merged**, but instead
replaced by the last matching item's options. This makes the behavior consistent
with how Babel works._
## Requirements
- Node.js v6.10+
- Yarn or npm client
## Installation
`babel-merge` can be installed via the Yarn or npm clients.
#### Yarn
```bash
yarn add babel-merge
```
#### npm
```bash
npm install --save babel-merge
```
## Usage
* __merge(a, b, _options_)__
* __merge.all([a, b, ..., z], _options_)__
Where `a`, `b`, `z` are [Babel configuration objects](https://babeljs.io/docs/usage/api/#options) and `options` is a [deepmerge](https://github.com/KyleAMathews/deepmerge#api) options object.
```js
const merge = require('babel-merge');
const together = merge(
{
presets: [
['@babel/preset-env', {
targets: {
browsers: ['latest 1 Chrome']
}
}]
]
},
{
presets: [
['@babel/preset-env', {
targets: {
browsers: ['latest 1 Firefox']
}
}]
]
}
)
console.log(together);
{
presets: [
['@babel/preset-env', {
targets: {
browsers: [
'latest 1 Firefox'
]
}
}]
]
}
```
If a pathname was used in an earlier merge, you can still merge by exact name:
```js
const merge = require('babel-merge');
const together = merge(
{
presets: [
[require.resolve('@babel/preset-env'), {
targets: {
browsers: ['latest 1 Chrome']
}
}]
]
},
{
presets: [
['@babel/preset-env', {
targets: {
browsers: ['latest 1 Firefox']
}
}]
]
}
)
console.log(together);
{
presets: [
['/Users/me/code/app/node_modules/@babel/preset-env/lib/index.js', {
targets: {
browsers: [
'latest 1 Firefox'
]
}
}]
]
}
```
Even works for plugins and presets within environments:
```js
const merge = require('babel-merge');
const together = merge(
{
env: {
development: {
presets: [
[require.resolve('@babel/preset-env'), {
targets: {
browsers: ['latest 1 Chrome']
}
}]
]
}
}
},
{
env: {
development: {
presets: [
['@babel/preset-env', {
targets: {
browsers: ['latest 1 Firefox']
}
}]
]
}
}
}
)
console.log(together);
{
env: {
development: {
presets: [
['/Users/me/code/app/node_modules/@babel/preset-env/lib/index.js', {
targets: {
browsers: [
'latest 1 Firefox'
]
}
}]
]
}
}
}
```
Order is preserved between non-option plugins and presets and ones with options:
```js
const merge = require('babel-merge');
const together = merge(
{
plugins: [
'module:fast-async',
'@babel/plugin-syntax-dynamic-import'
]
},
{
plugins: [
'@babel/plugin-proposal-object-rest-spread',
['module:fast-async', { spec: true }],
'@babel/plugin-proposal-class-properties'
]
}
)
console.log(together);
{
plugins: [
['module:fast-async', { spec: true }],
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-proposal-object-rest-spread',
'@babel/plugin-proposal-class-properties'
]
}
```
[npm-image]: https://img.shields.io/npm/v/babel-merge.svg
[npm-downloads]: https://img.shields.io/npm/dt/babel-merge.svg
[npm-url]: https://npmjs.org/package/babel-merge