|
|
- # 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
|