babel-merge

    3.0.0 • Public • Published

    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 downloads

    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'
      ]
    }

    Keywords

    none

    Install

    npm i babel-merge

    DownloadsWeekly Downloads

    121,937

    Version

    3.0.0

    License

    MIT

    Unpacked Size

    171 kB

    Total Files

    19

    Last publish

    Collaborators

    • edmorley
    • eliperelman
    • helfi92
    • timkelty