ChatGPT解决这个技术问题 Extra ChatGPT

Babel 6 regeneratorRuntime 未定义

我试图在 Babel 6 上从头开始使用 async/await,但我得到 regeneratorRuntime 未定义。

.babelrc 文件

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

包.json 文件

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

.js 文件

"use strict";
async function foo() {
  await bar();
}
function bar() { }
exports.default = foo;

在没有 async/await 的情况下正常使用它就可以了。任何想法我做错了什么?

babel-polyfill 是你需要的。
从 7.4 开始,babel-polyfill 已被弃用; this updated so post 描述了迁移。
对于那些使用较新版本的 babel 和节点的人:stackoverflow.com/a/62254909/8169904
babel 预设环境没有做它声称做的事情:github.com/babel/babel/issues/7619#issuecomment-375430112

L
Lemmings19

babel-polyfill(Babel 7.4 中的 deprecated)是必需的。您还必须安装它才能使 async/await 正常工作。

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

包.json

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

.babelrc

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

.js 与 async/await(示例代码)

"use strict";

export default async function foo() {
  var s = await bar();
  console.log(s);
}

function bar() {
  return "bar";
}

在启动文件中

require("babel-core/register");
require("babel-polyfill");

如果您使用的是 webpack,则需要将其作为 entry 数组的第一个值放入您的 webpack 配置文件(通常是 webpack.config.js)中,根据@Cemen 评论:

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

  output: {
    filename: 'bundle.js'       
  },

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

如果您想使用 babel 运行测试,请使用:

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

当您将 babel 与 webpack 一起使用时很重要:不要使用不起作用的 require("babel-polyfill"),而是将 "babel-polyfill" 添加到配置中的 entry 中,如下所示:entry: ["babel-polyfill", "src/main.js"]。这对我有用,包括在带有 HMR 的 webpack-dev-server 中使用。
我试图让我的 mocha 测试与 babel6 和 async 一起运行,我不得不将 --require babel-polyfill 添加到 npm 测试运行器配置中
babel-register 有什么用?
@Lloyd devDependency 如果您使用的是 webpack,因为它会在运行之前“编译”文件。 dependency 如果你没有使用 webpack 并且你需要 babel。
这使得输出文件很大......最好只使用你需要的东西,而不是直接需要 babel-polyfill。
J
Jahanzaib Aslam

注意 如果您使用的是 babel 7,则该包已重命名为 @babel/plugin-transform-runtime。

除了 polyfill,我还使用了 babel-plugin-transform-runtime。该插件描述为:

外部化对助手和内置函数的引用,自动填充代码而不污染全局变量。这实际上意味着什么?基本上,您可以使用 Promise、Set、Symbol 等内置插件,也可以无缝使用所有需要 polyfill 的 Babel 功能,而不会造成全局污染,非常适合库。

它还包括对 async/await 的支持以及 ES 6 的其他内置功能。

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

.babelrc 中,添加运行时插件

{
  "plugins": [
    ["transform-runtime", {
      "regenerator": true
    }]
  ]
}

我不需要 babel-runtime 来获得异步等待工作。那是对的吗?编辑:我正在运行代码服务器端。 :)
如果你能够在没有 babel-runtime 的情况下使用它,那是因为它已经在你的依赖树中了。所以请注意,如果您正在编写一个库,并且 babel-runtime 作为开发依赖项出现,那么您的用户可能不存在它。您必须将其作为正常的分发依赖项包含在内。
只需要 babel-plugin-transform-runtime。奇迹般有效。
此解决方案不好,因为它需要额外的 Browserify 或 Webpack 作业来扩展由 transform-runtime 插件添加的 require 调用。
请注意,对于 Babel 7,您需要运行 npm install --save-dev @babel/plugin-transform-runtime
M
Matt Shirley

Babel 7 用户

我在解决这个问题时遇到了一些麻烦,因为大多数信息都是针对以前的 babel 版本的。对于 Babel 7,安装这两个依赖项:

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

并且,在 .babelrc 中,添加:

{
    "presets": ["@babel/preset-env"],
    "plugins": [
        ["@babel/transform-runtime"]
    ]
}

该文档将用法显示为 "plugins": ["@babel/plugin-transform-runtime"],而不是此处的 "plugins": [ ["@babel/transform-runtime"] ]。不同的插件名称。两者都有效。但是哪一个才是正确的呢?...
遵循此方法时,我得到 require is not defined
@kyw 最好始终遵循文档 - 除了约定之外没有区别。
@babel/transform-runtime 添加到插件对我来说导致“未定义导出”错误。我将其更改为此以使异步在 Babel7 中工作:["@babel/plugin-transform-runtime", { "regenerator": true } ]
我正在使用 Babel 7.4.4,这个答案对我有用。
T
Tyler Liu

更新

如果您将目标设置为 Chrome,它将起作用。但可能不适用于其他目标,请参考:https://github.com/babel/babel-preset-env/issues/112

所以这个答案非常适合原始问题。我将在此处保留它作为对 babel-preset-env 的参考。

一个简单的解决方案是在代码开头添加 import 'babel-polyfill'

如果您使用 webpack,一个快速的解决方案是添加 babel-polyfill,如下所示:

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

我相信我已经找到了最新的最佳实践。

检查此项目:https://github.com/babel/babel-preset-env

yarn add --dev babel-preset-env

使用以下内容作为您的 babel 配置:

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

那么您的应用程序应该可以在 Chrome 浏览器的最后 2 个版本中运行。

您还可以将 Node 设置为目标或根据 https://github.com/ai/browserslist 微调浏览器列表

告诉我什么,不要告诉我怎么做。

我真的很喜欢 babel-preset-env 的理念:告诉我你想支持哪种环境,不要告诉我如何支持它们。这是声明式编程的美妙之处。

我已经测试了 async await,它们确实有效。我不知道它们是如何工作的,我真的不想知道。我想把时间花在自己的代码和业务逻辑上。感谢 babel-preset-env,它将我从 Babel 配置地狱中解放出来。


这真的有效。唯一的缺点是 babel-preset-env 拉取了一堆依赖项,但我认为这是值得的。也喜欢声明式风格。 yarn install 现在也是 yarn add
@gargantuan 是的。
如果您想针对较旧的浏览器或节点版本,这并不是一个真正的解决方案。
以防万一它不明显....如果您需要您的代码在 IE11 中工作,这个推荐的解决方案将不起作用
为什么会有这么多赞成票?这只有效,因为它不再转换 async/await,因此不再需要 regeneratorRuntime 并且因为它没有被转换,所以它不适用于不支持它的浏览器。
f
ford04

更新Babel 7 post 也有更深入的答案。

Babel 7.4.0 或更高版本 (core-js 2 / 3)

Babel 7.4.0@babel/polyfill is deprecated

一般来说,安装 polyfills/regenerator 有两种方法:通过全局命名空间(选项 1)或作为 ponyfill(选项 2,没有全局污染)。

选项 1:@babel/preset-env

presets: [
  ["@babel/preset-env", {
    "useBuiltIns": "usage",
    "corejs": 3, // or 2,
    "targets": {
        "firefox": "64", // or whatever target to choose .    
    },
  }]
]

将根据您的 target 自动使用 regenerator-runtimecore-js。无需手动导入任何内容。不要忘记安装运行时依赖项:

npm i --save regenerator-runtime core-js

或者,设置 useBuiltIns: "entry" 并手动导入:

import "regenerator-runtime/runtime";
import "core-js/stable"; // if polyfills are also needed

选项 2:@babel/transform-runtime 和 @babel/runtime

这种替代方案没有全局范围污染,适用于库。

{
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "regenerator": true,
        "corejs": 3 // or 2; if polyfills needed
        ...
      }
    ]
  ]
}
npm i -D @babel/plugin-transform-runtime
npm i @babel/runtime

如果使用 corejs polyfill,请将 @babel/runtime 替换为 @babel/runtime-corejs2(用于 "corejs": 2)或 @babel/runtime-corejs3(用于 "corejs": 3)。


{ "presets": [ [ "@babel/preset-env", { "targets": { "esmodules": true } } ] ] } 这有助于我构建 node.js
我的意思是我已经知道了,但是为了帮助别人,这应该是正确的答案。此致!
请注意,如果使用值分别为 23corejs 选项,您应该使用 @babel/runtime-corejs2@babel/runtime-corejs3。文档中提到了这一点:babeljs.io/docs/en/babel-plugin-transform-runtime#corejs
感谢@Robin-Hoodie,我更新了答案的最后一部分,以便在这个主题上更加清楚。
A
Antony Mativos

或者,如果您不需要 babel-polyfill 提供的所有模块,您可以在 webpack 配置中指定 babel-regenerator-runtime

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

  // ...
};

当使用带有 HMR 的 webpack-dev-server 时,这样做可以大大减少每次构建时必须编译的文件数量。该模块是作为 babel-polyfill 的一部分安装的,因此如果您已经安装了它就可以了,否则您可以使用 npm i -D babel-regenerator-runtime 单独安装它。


这似乎是最方便的解决方案。但是,大多数浏览器都支持生成器,因此这种解决方案可能不是最佳解决方案。请参阅:blogs.candoerz.com/question/213492/…
如果你不使用 webpack 怎么办?
r
radzak

我的简单解决方案:

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

.babelrc

{
  "presets": [
    ["latest", {
      "es2015": {
        "loose": true
      }
    }],
    "react",
    "stage-0"
  ],
  "plugins": [
    "transform-runtime",
    "transform-async-to-generator"
  ]
}

您在插件中缺少“transform-async-to-generator”。我还必须添加它以使其正常工作
@GabrielBB 我已经编辑了这篇文章,所以它是一个完整的例子。
需要loose: true吗?
使用它时,它会将要求添加到我的文件中,并且要求在浏览器中未定义。
松散:不需要真正的。您在 .babelrc 中真正需要的是: { "presets": ["es2015", "react", "stage-2"], "plugins": [ "transform-runtime", "transform-async-to-generator " ] }
C
Cat Perry

async/await 函数在没有适当的 Babel 插件的情况下使用时会导致此错误。自 2020 年 3 月起,您只需要做以下事情。 (@babel/polyfill 并且许多公认的解决方案在 Babel 中已被弃用。在 Babel docs. 中了解更多信息)

在命令行中,键入:

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

在您的 babel.config.js 文件中,添加此插件 @babel/plugin-transform-runtime。注意:下面的示例包括我最近从事的一个小型 React/Node/Express 项目的其他预设和插件:

module.exports = {
  presets: ['@babel/preset-react', '@babel/preset-env'],
  plugins: ['@babel/plugin-proposal-class-properties', 
  '@babel/plugin-transform-runtime'],
};

总是让我惊讶的是开发人员是多么的懒惰。 Babel 开发人员决定弃用功能,他们可能认为这会成为一个问题。为什么不让人们知道最可能的意图是什么,以及他们应该做些什么来解决它。但是不,让我们只显示一些对新手来说绝对没用的信息。
对我来说效果很好。我的非反应项目 .babelrc 看起来像这样:`` { "presets": [ "@babel/preset-env" ], "plugins": [ "@babel/plugin-transform-runtime" ] } `` `
我收到属性预设无效的错误
它告诉我Uncaught ReferenceError: require is not defined
谢谢!最后一个答案不使用已弃用的@babel/polyfill。在我的测试中尝试使用 async/await 时,这对我有用。
j
jony89

babel-regenerator-runtime 现在是 deprecated,而应该使用 regenerator-runtime

要将运行时生成器与 webpackbabel v7 一起使用:

安装 regenerator-runtime

npm i -D regenerator-runtime

然后在 webpack 配置中添加:

entry: [
  'regenerator-runtime/runtime',
  YOUR_APP_ENTRY
]

这应该是公认的答案,babel-polyfill 添加了太多其他东西
非常适合我...非常感谢
但是,此方法始终包含运行时。我相信它违背了 @babel/preset-envuseBuiltIns 的目的,即根据您的目标浏览器动态插入运行时。
这对我有用,泰。
Z
Zero

根据以下示例更新您的 .babelrc 文件,它将起作用。

如果您使用 @babel/preset-env

{
  "presets": [
    [
      "@babel/preset-env", {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}
or if you are using babel-preset-env package

{
  "presets": [
    [
      "env", {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

请解释你的答案? “节点”:“当前”做什么
我还想知道它的作用以及它是否是推荐的解决方案 - 即它不会危及任何东西并且是“面向未来的”(目前尽可能多)。 targets 似乎指的是 this : the environments you support/target for your project,而 targets.nodethis: if you want to compile against the current node version, you can specify "node": true or "node": "current", which would be the same as "node": process.versions.node
FWIW,我使用了答案中定义的第二个块(并在过程中删除了 "stage-0" )并且再生器错误消失了。
@BunkerBoy 为方便起见,您可以使用 "node": "current" 仅包含用于运行 Babel 的 Node.js 版本的必要 polyfill 和转换
所以为此我不必安装 polyfills 吗?
D
Deke

截至 2019 年 10 月,这对我有用:

将此添加到预设中。

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

然后使用 npm 安装 regenerator-runtime。

npm i regenerator-runtime

然后在您的主文件中使用:(此导入仅使用一次)

import "regenerator-runtime/runtime";

这将使您能够在文件中使用 async awaits 并删除 regenerator error


不为 useBuiltIns 设置值会将其默认为 false。这不会根据目标环境自动导入任何 polyfill,这有点破坏 "@babel/preset-env" 的目的。 Here 也是 babel 开发人员之一的相关评论。
A
Ally

小心提升的功能

我在同一个文件中有我的“polyfill import”和“async function”,但是我使用的函数语法将它提升到 polyfill 之上,这会给我 ReferenceError: regeneratorRuntime is not defined 错误。

更改此代码

import "babel-polyfill"
async function myFunc(){ }

对此

import "babel-polyfill"
var myFunc = async function(){}

以防止它被提升到 polyfill 导入上方。


a;kgjablrsdkjfjasnkljfbajklfdablkhjnfl;sad 我疯了,你救了我我爱你
Z
Zubair Alam

如果使用 babel-preset-stage-2,则只需使用 --require babel-polyfill 启动脚本。

在我的情况下,此错误是由 Mocha 测试引发的。

以下修复了问题

mocha \"server/tests/**/*.test.js\" --compilers js:babel-register --require babel-polyfill


k
k1eran

我使用了来自 https://github.com/babel/babel/issues/9849#issuecomment-592668815 的提示并将 targets: { esmodules: true,} 添加到我的 babel.config.js

module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          esmodules: true,
        },
      },
    ],
  ],
}

为什么这能解决问题?
@jjmerelo 我只知道我在链接的 GitHub 问题上读到的内容。在进行此更改之前,我在此问题中尝试了许多其他答案,但在我的设置中,这只是修复它的一个!
T
Tom Söderlund

我在 Chrome 中遇到了这个问题。类似于 RienNeVaPlu͢s 的回答,这为我解决了这个问题:

npm install --save-dev regenerator-runtime

然后在我的代码中:

import 'regenerator-runtime/runtime';

很高兴避免来自 babel-polyfill 的额外 200 kB。


这个答案被低估了,这是最简单的解决方案。但是在 dev 依赖中安装它是行不通的,你需要在依赖中安装它。我的用例是部署到 firebase 功能 nodejs 14
C
Community

您收到错误是因为 async/await 使用生成器,这是 ES2016 功能,而不是 ES2015。解决此问题的一种方法是为 ES2016 (npm install --save babel-preset-es2016) 安装 babel 预设并编译为 ES2016 而不是 ES2015:

"presets": [
  "es2016",
  // etc...
]

正如其他答案所提到的,您也可以使用 polyfills(但请确保在运行任何其他代码之前先使用 load the polyfill first)。或者,如果您不想包含所有 polyfill 依赖项,则可以使用 babel-regenerator-runtimebabel-plugin-transform-runtime


J
Joshua Dyck

将我的项目转换为打字稿项目后,我开始收到此错误。据我了解,问题源于 async/await 未被识别。

对我来说,通过在我的设置中添加两件事来修复错误:

正如上面多次提到的,我需要将 babel-polyfill 添加到我的 webpack 入口数组中: ... entry: ['babel-polyfill', './index.js'], ... 我需要更新我的 .babelrc允许将 async/await 编译到生成器中:{ "presets": ["es2015"], "plugins": ["transform-async-to-generator"] }

开发依赖:

我还必须在 package.json 文件中的 devDependencies 中安装一些东西。也就是说,我错过了 babel-plugin-transform-async-to-generator、babel-polyfill 和 babel-preset-es2015:

 "devDependencies": {
    "babel-loader": "^6.2.2",
    "babel-plugin-transform-async-to-generator": "^6.5.0",
    "babel-polyfill": "^6.5.0",
    "babel-preset-es2015": "^6.5.0",
    "webpack": "^1.12.13"
 }

完整代码要点:

我从一个非常有用且简洁的 GitHub gist 中获得了代码,您可以找到 here


最好使用预设 env 而不是 es2015env 已包含 es2015
A
Ayobami

我通过安装 babel-polyfill 修复了这个错误

npm install babel-polyfill --save

然后我将它导入我的应用程序入口点

import http from 'http';
import config from 'dotenv';
import 'babel-polyfill';
import { register } from 'babel-core';
import app from '../app';

为了测试,我在我的测试脚本中包含了 --require babel-polyfill

"test": "export NODE_ENV=test|| SET NODE_ENV=test&& mocha --compilers 
  js:babel-core/register --require babel-polyfill server/test/**.js --exit"

T
The gates of Zion

上面的答案太多了,我把我的答案贴出来供我参考。我使用 webpack 并做出反应,这是我没有 .babelrc 文件的解决方案

我正在 2020 年 8 月进行这项工作

安装 react 和 babel

npm i @babel/core babel-loader @babel/preset-env @babel/preset-react react react-dom @babel/plugin-transform-runtime --save-dev

然后在我的 webpack.config.js

// other stuff
module.exports = {
// other stuff

   module: {
   rules: [
  
   {
    test: /\.m?js$/,
    exclude: /(node_modules|bower_components)/,
    use: {
      loader: 'babel-loader',
      options: {
        presets: ['@babel/preset-env',"@babel/preset-react"],
        plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-transform-runtime'],
        //npm install --save-dev @babel/plugin-transform-runtime
          }
        }
      },
    ],
  },

};

我只是不知道为什么我暂时不需要安装异步包


M
MD Ashik

新答案 为什么你听我的回答?

Ans: 因为我要用最新的更新版本 npm project 给你一个答案。

2017 年 4 月 14 日

"name": "es6",
 "version": "1.0.0",
   "babel-core": "^6.24.1",
    "babel-loader": "^6.4.1",
    "babel-polyfill": "^6.23.0",
    "babel-preset-es2015": "^6.24.1",
    "webpack": "^2.3.3",
    "webpack-dev-server": "^2.4.2"

如果您使用此版本或更多 UP 版本的 Npm 和所有其他...所以只需要更改:

webpack.config.js

module.exports = {
  entry: ["babel-polyfill", "./app/js"]
};

更改 webpack.config.js 文件后,只需将此行添加到您的代码顶部。

import "babel-polyfill";

现在检查一切正常。 Reference LINK

还要感谢@BrunoLM 的好回答。


如果它是后端服务,他为什么要使用 webpack?您的回答暗示他必须使用 webpack?
@Spock,我确实考虑过。我面临同样的问题,我用这种简单的方式解决了我的问题。我认为这对 Webpack 用户来说是肯定的答案,而且野兔有更多的正确答案,所以你可以关注任何其他人。
为什么你需要按下投票!!!!如果你想帮助我,你能说出原因吗?
Q
Qiulang

我需要支持的目标浏览器已经支持 async/await,但是在编写 mocha 测试时,如果没有正确设置,我仍然会收到此错误。

我用谷歌搜索的大多数文章都已过时,包括此处接受的答案和高票数的答案,即您不需要polyfillbabel-regenerator-runtimebabel-plugin-transform-runtime。等等 如果你的目标浏览器已经支持 async/await (当然如果不是你需要 polyfill)

我也不想使用 webpack

Tyler Long 的回答实际上是在正确的轨道上,因为他建议 babel-preset-env (但我先省略了它,因为他在开头提到了 polifill)。一开始我仍然得到ReferenceError: regeneratorRuntime is not defined,然后我意识到这是因为我没有设定目标。为节点设置目标后,我修复了 regeneratorRuntime 错误:

  "scripts": {
    //"test": "mocha --compilers js:babel-core/register"
    //https://github.com/mochajs/mocha/wiki/compilers-deprecation
    "test": "mocha --require babel-core/register"
  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-preset-env": "^1.7.0",
    "mocha": "^5.2.0"
  },
  //better to set it .bablerc, I list it here for brevity and it works too.
  "babel": {
    "presets": [
      ["env",{
        "targets": {
          "node": "current"
           "chrome": 66,
           "firefox": 60,
        },
        "debug":true
      }]
    ]
  }

g
gazdagergo

我的工作 babel 7 样板与再生器运行时反应:

.babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": true,
        },
      },
    ],
    "@babel/preset-react",
  ],
  "plugins": [
    "@babel/plugin-syntax-class-properties",
    "@babel/plugin-proposal-class-properties"
  ]
}

包.json

...

"devDependencies": {
  "@babel/core": "^7.0.0-0",
  "@babel/plugin-proposal-class-properties": "^7.4.4",
  "@babel/plugin-syntax-class-properties": "^7.2.0",
  "@babel/polyfill": "^7.4.4",
  "@babel/preset-env": "^7.4.5",
  "@babel/preset-react": "^7.0.0",
  "babel-eslint": "^10.0.1",
...

main.js

import "@babel/polyfill";

....

J
Jackie Santana

在控制台中修复此“regeneratorRuntime 未定义问题”的最简单方法:

您不必安装任何不必要的插件。只需添加:

<script src="https://unpkg.com/regenerator-runtime@0.13.1/runtime.js"></script>

在 index.html 的正文中。现在 regeneratorRuntime 应该在你运行 babel 后定义,现在你的 async/await 函数应该成功编译到 ES2015 中


迄今为止最简单、最简洁的回答。谢谢!
c
csharpfolk

当我尝试使用 ES6 生成器时,使用带有汇总的 gulp 得到此错误:

gulp.task('scripts', () => {
  return rollup({
    entry: './app/scripts/main.js',
    format: "iife",
    sourceMap: true,
    plugins: [babel({
      exclude: 'node_modules/**',
      "presets": [
        [
          "es2015-rollup"
        ]
      ],
      "plugins": [
        "external-helpers"
      ]
    }),
    includePaths({
      include: {},
      paths: ['./app/scripts'],
      external: [],
      extensions: ['.js']
    })]
  })

  .pipe(source('app.js'))
  .pipe(buffer())
  .pipe(sourcemaps.init({
    loadMaps: true
  }))
  .pipe(sourcemaps.write('.'))
  .pipe(gulp.dest('.tmp/scripts'))
  .pipe(reload({ stream: true }));
});

我可能会认为解决方案是将 babel-polyfill 作为 Bower 组件:

bower install babel-polyfill --save

并将其添加为 index.html 中的依赖项:

<script src="/bower_components/babel-polyfill/browser-polyfill.js"></script>

谢谢你。这对我有用。我不知道我需要添加脚本标签才能在客户端工作。
L
Luisangonzalez

1 - 安装 babel-plugin-transform-async-to-module-method、babel-polyfil、bluebird、babel-preset-es2015、babel-core:

npm install babel-plugin-transform-async-to-module-method babel-polyfill bluebird babel-preset-es2015 babel-core

2 - 添加你的 js babel polyfill:

import 'babel-polyfill';

3 - 在你的 .babelrc 中添加插件:

{
    "presets": ["es2015"],
    "plugins": [
      ["transform-async-to-module-method", {
        "module": "bluebird",
        "method": "coroutine"
      }]
    ]
}

来源:http://babeljs.io/docs/plugins/transform-async-to-module-method/


A
Adeel Imran

对于希望使用 babel-polyfill 版本 7^ 的人,请使用 webpack ver3^。

Npm 安装模块 npm i -D @babel/polyfill

然后在您的 entry 点的 webpack 文件中执行此操作

entry: ['@babel/polyfill', path.resolve(APP_DIR, 'App.js')],

P
Petros Kyriakou

对于 babel7 用户和 ParcelJS >= 1.10.0 用户

npm i @babel/runtime-corejs2
npm i --save-dev @babel/plugin-transform-runtime @babel/core

.babelrc

{
  "plugins": [
    ["@babel/plugin-transform-runtime", {
      "corejs": 2
    }]
  ]
}

取自 https://github.com/parcel-bundler/parcel/issues/1762


E
Evgenia Karunus

我使用 presets: ['es2015', 'stage-0']
mochawebpack 进行了设置
,它正在运行由 webpack 编译的测试。

为了使我的 async/await 在测试中工作,我所要做的就是使用带有 --require babel-polyfill 选项的 mocha:

mocha --require babel-polyfill

D
Dilip Tarkhala

只需使用以下命令安装 regenerator-runtime

npm i regenerator-runtime

在需要服务器文件之前在启动文件中添加以下行

require("regenerator-runtime/runtime");

到目前为止,这一直对我有用


A
Aaron Miller

我正在使用 React 和 Django 项目,并通过使用 regenerator-runtime 使其工作。您应该这样做,因为 @babel/polyfill 会进一步增加您的应用程序的大小,而且也是 deprecated。我还关注了 this tutorial's 第 1 集和2 创建我的项目的 structure

*package.json*

...
"devDependencies": {
    "regenerator-runtime": "^0.13.3",
    ...
}

.babelrc

{
   "presets": ["@babel/preset-env", "@babel/preset-react"],
   "plugins": ["transform-class-properties"]
}

index.js

...
import regeneratorRuntime from "regenerator-runtime";
import "regenerator-runtime/runtime";
ReactDOM.render(<App />, document.getElementById('app'));
...