Babel 6 regeneratorRuntime is not defined

Babel 6 regeneratorRuntime is not defined

I’m trying to use async, await from scratch on Babel 6, but I’m getting regeneratorRuntime is not defined.
.babelrc file
“presets”: [ “es2015”, “stage-0” ]

package.json file
“devDependencies”: {
“babel-core”: “^6.0.20”,
“babel-preset-es2015”: “^6.0.15”,
“babel-preset-stage-0”: “^6.0.15”

.js file
“use strict”;
async function foo() {
await bar();
function bar() { }
exports.default = foo;

Using it normally without the async/await works just fine. Any ideas what I’m doing wrong?


Solution 1:

babel-polyfill is required. You must also install it in order to get async/await working.

npm i -D babel-core babel-polyfill babel-preset-es2015 babel-preset-stage-0 babel-loader


"devDependencies": {
  "babel-core": "^6.0.20",
  "babel-polyfill": "^6.0.16",
  "babel-preset-es2015": "^6.0.15",
  "babel-preset-stage-0": "^6.0.15"


  "presets": [ "es2015", "stage-0" ]

.js with async/await (sample code)

"use strict";

export default async function foo() {
  var s = await bar();

function bar() {
  return "bar";

In the startup file


If you are using webpack you need to put it as the first value of your entry array in your webpack configuration file (usually webpack.config.js), as per @Cemen comment:

module.exports = {
  entry: ['babel-polyfill', './test.js'],

  output: {
    filename: 'bundle.js'       

  module: {
    loaders: [
      { test: /\.jsx?$/, loader: 'babel', }

If you want to run tests with babel then use:

mocha --compilers js:babel-core/register --require babel-polyfill

Solution 2:

Besides polyfill, I use babel-plugin-transform-runtime. The plugin is described as:

Externalize references to helpers and builtins, automatically polyfilling your code without polluting globals. What does this actually mean though? Basically, you can use built-ins such as Promise, Set, Symbol etc as well use all the Babel features that require a polyfill seamlessly, without global pollution, making it extremely suitable for libraries.

It also includes support for async/await along with other built-ins of ES 6.

$ npm install --save-dev babel-plugin-transform-runtime

In .babelrc, add the runtime plugin

  "plugins": [
    ["transform-runtime", {
      "polyfill": false,
      "regenerator": true

Solution 3:


It works if you set the target to Chrome. But it might not work for other targets, please refer to:

So this answer is NOT quite proper for the original question. I will keep it here as a reference to babel-preset-env.

A simple solution is to add import 'babel-polyfill' at the beginning of your code.

If you use webpack, a quick solution is to add babel-polyfill as shown below:

entry: {
    index: ['babel-polyfill', './index.js']

I believe I’ve found the latest best practice.

Check this project:

yarn add --dev babel-preset-env

Use the following as your babel configuration:

  "presets": [
    ["env", {
      "targets": {
        "browsers": ["last 2 Chrome versions"]

Then your app should be good to go in the last 2 versions of Chrome browser.

You can also set Node as the targets or fine-tune the browsers list according to

Tell me what, don’t tell me how.

I really like babel-preset-env‘s philosophy: tell me which environment you want to support, do NOT tell me how to support them. It’s the beauty of declarative programming.

I’ve tested async await and they DO work. I don’t know how they work and I really don’t want to know. I want to spend my time on my own code and my business logic instead. Thanks to babel-preset-env, it liberates me from the Babel configuration hell.

Solution 4:

Babel 7 Users

I had some trouble getting around this since most information was for prior babel versions. For Babel 7, install these two dependencies:

npm install --save @babel/runtime 
npm install --save-dev @babel/plugin-transform-runtime

And, in .babelrc, add:

    "presets": ["@babel/preset-env"],
    "plugins": [

Solution 5:

Alternatively, if you don’t need all the modules babel-polyfill provides, you can just specify babel-regenerator-runtime in your webpack config:

module.exports = {
  entry: ['babel-regenerator-runtime', './test.js'],

  // ...

When using webpack-dev-server with HMR, doing this reduced the number of files it has to compile on every build by quite a lot. This module is installed as part of babel-polyfill so if you already have that you’re fine, otherwise you can install it separately with npm i -D babel-regenerator-runtime.

Solution 6:

My simple solution:

npm install --save-dev babel-plugin-transform-runtime
npm install --save-dev babel-plugin-transform-async-to-generator


  "presets": [
    ["latest", {
      "es2015": {
        "loose": true
  "plugins": [