mirror of
https://github.com/henrywhitaker3/Speedtest-Tracker.git
synced 2025-12-25 23:03:36 +01:00
209 lines
3.7 KiB
Markdown
209 lines
3.7 KiB
Markdown
# 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
|