1. babel-esm-plugin
Add this plugin to generate mirrored esm modules for your existing bundles
babel-esm-plugin
Package: babel-esm-plugin
Created by: prateekbh
Last modified: Mon, 11 Apr 2022 16:34:13 GMT
Version: 0.9.0
License: MIT
Downloads: 28,478
Repository: https://github.com/prateekbh/babel-esm-plugin

Install

npm install babel-esm-plugin
yarn add babel-esm-plugin

babel-esm-plugin

Build Status

Add this plugin to generate mirrored esm modules for your existing bundles. You may use these bundles in module/nomodule in your web-app and ship less transpiled code to your users.
Works with Webpack4 and Babel7

npm i -D babel-esm-plugin

Note

This plugin only works when you're already using babel-preset-env.

Also, there is an expectation that your babel-preset-env is configured in the shape:

{
  use: {
    loader: 'babel-loader',
    options: {
      "presets": [["@babel/preset-env", {
        "targets": {
          "browsers": ["last 2 versions", "safari >= 7"]
        }
        ....
      }]]
    },
  },
}

Options

 new BabelEsmPlugin({
  filename: '[name].es6.js',
  chunkFilename: '[id].es6.js',
  excludedPlugins: [...],
  additionalPlugins: [...],
  beforeStartExecution: function(plugins, babelConfig) {}
});
  1. filename: Output name of es6 bundles. (default: '[name].es6.js')
  2. chunkFilename: Output name of es6 chunks. (default: '[id].es6.js')
  3. excludedPlugins: List of plugins you want to exclude from generating es6 bundles.
  4. additionalPlugins: List of plugins you want to add while generating es6 bundles.
  5. beforeStartExecution: A callback function which passes all plugins and the new babel config, to a function where the user can modify them before starting the ESM build.

Without this plugin

A usual output from webpack output looks like this:
ES5 output

With this plugin

With this plugin added, you will be generating es6 outputs:
ES5 output

How to use

   const BabelEsmPlugin = require('babel-esm-plugin');

  module.exports = {
    entry: {
      index: './index.js',
      home: './index2.js'
    },
    output: {
      filename: "[name].js"
    },
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: /(node_modules|bower_components)/,
          use: {
            loader: 'babel-loader',
            options: {
              "presets": [["@babel/preset-env", {
                "targets": {
                  "browsers": ["last 2 versions", "safari >= 7"]
                }
              }]]
            },
          },
        }
      ]
    },
    plugins: [
      new BabelEsmPlugin()
    ]
  }

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code