You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			| 
				
					
						
							 | 
			5 years ago | |
|---|---|---|
| .. | ||
| .idea | 5 years ago | |
| dist | 5 years ago | |
| node_modules/deepmerge | 5 years ago | |
| src | 5 years ago | |
| test | 5 years ago | |
| .babelrc.js | 5 years ago | |
| .nycrc.json | 5 years ago | |
| LICENSE | 5 years ago | |
| README.md | 5 years ago | |
| package.json | 5 years ago | |
| yarn.lock | 5 years ago | |
		
			
				
				README.md
			
		
		
	
	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'
  ]
}