1. karma-babel-preprocessor
Preprocessor to compile ES6 on the fly with babel.
karma-babel-preprocessor
Package: karma-babel-preprocessor
Created by: babel
Last modified: Sun, 19 Jun 2022 07:53:55 GMT
Version: 8.0.2
License: ISC
Downloads: 214,886
Repository: https://github.com/babel/karma-babel-preprocessor

Install

npm install karma-babel-preprocessor
yarn add karma-babel-preprocessor

build status
npm version
npm downloads

karma-babel-preprocessor

Preprocessor to compile ES6 on the fly with babel.

babel and karma-babel-preprocessor only convert ES6 modules to CommonJS/AMD/SystemJS/UMD. If you choose CommonJS, you still need to resolve and concatenate CommonJS modules on your own. We recommend karma-browserify + babelify or webpack + babel-loader in such cases.

Installation

With babel 7.x:

 npm install karma-babel-preprocessor @babel/core @babel/preset-env --save-dev

With babel 6.x:

 npm install karma-babel-preprocessor@7 babel-core babel-preset-env --save-dev

As of Babel 6.0, you need to tell Babel which features to use. @babel/preset-env would be the most common one.

Configuration

See babel options for more details.

Given options properties are passed to babel.

In addition to the options property, you can configure any babel options with function properties. This is useful when you want to give different babel options from file to file.

For example, inline sourcemap configuration would look like the following.

 module.exports = function (config) {
  config.set({
    preprocessors: {
      'src/**/*.js': ['babel'],
      'test/**/*.js': ['babel']
    },
    babelPreprocessor: {
      options: {
        presets: ['@babel/preset-env'],
        sourceMap: 'inline'
      },
      filename: function (file) {
        return file.originalPath.replace(/\.js$/, '.es5.js');
      },
      sourceFileName: function (file) {
        return file.originalPath;
      }
    }
  });
};

Don't preprocess third-party libraries

Third-party libraries may not work properly if you apply karma-babel-preprocessor to them. It also introduces unnecessary overhead. Make sure to explicitly specify files that you want to preprocess.

OK:

 module.exports = function (config) {
  config.set({
    preprocessors: {
      'src/**/*.js': ['babel'],
      'test/**/*.js': ['babel']
    },
    // ...
  });
};

NG:

 module.exports = function (config) {
  config.set({
    preprocessors: {
      './**/*.js': ['babel']
    },
    // ...
  });
};

Because it preprocesses files in node_modules and may break third-party libraries like jasmine #18.

Polyfill

If you need polyfill, make sure to include it in files.

 npm install @babel/polyfill --save-dev
 module.exports = function (config) {
  config.set({
    files: [
      'node_modules/@babel/polyfill/dist/polyfill.js',
      // ...
    ],
    // ...
  });
});

Karma's plugins option

In most cases, you don't need to explicitly specify plugins option. By default, Karma loads all sibling NPM modules which have a name starting with karma-*. If need to do so for some reason, make sure to include 'karma-babel-preprocessor' in it.

 module.exports = function (config) {
  config.set({
    plugins: [
     'karma-jasmine',
     'karma-chrome-launcher',
     'karma-babel-preprocessor'
    ],
    // ...
  });
};

Custom preprocessor

karma-babel-preprocessor supports custom preprocessor. Set base: 'babel' in addition to normal preprocessor config.

 module.exports = function (config) {
  config.set({
    preprocessors: {
      'src/**/*.js': ['babelSourceMap'],
      'test/**/*.js': ['babelSourceMap']
    },
    customPreprocessors: {
      babelSourceMap: {
        base: 'babel',
        options: {
          presets: ['@babel/preset-env'],
          sourceMap: 'inline'
        },
        filename: function (file) {
          return file.originalPath.replace(/\.js$/, '.es5.js');
        },
        sourceFileName: function (file) {
          return file.originalPath;
        }
      },
      // Other custom preprocessors...
    }
  });
};

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