Package Exports
- babel-merge
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (babel-merge) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
babel-merge
babel-merge
merges multiple Babel configuration objects into a single copy.
Plugin and preset objects and arrays will be merged together.
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
❯ yarn add babel-merge
npm
❯ npm install --save babel-merge
Usage
- merge(a, b, options)
- merge.all([a, b, ..., z], options)
Where a
, b
, z
are Babel configuration objects and options
is a deepmerge options object.
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:
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:
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:
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'
]
}