Babel 6 regeneratorRuntimeが定義されていません


634

私は非同期を使用しようとしていますが、Babel 6でゼロから待機していますが、regeneratorRuntimeが定義されていません。

.babelrcファイル

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

package.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を使用せずに通常どおり使用しても問題ありません。私が間違っていることはありますか?


再生器を含めましたか?
ssube 2015年

3
babel-polyfillが必要です。
ロニーロイストン

babel-polyfillは7.4で廃止されました。この更新された投稿は移行について説明しています。
JWCS

新しいバージョンのバベルとノードを使用している場合:stackoverflow.com/a/62254909/8169904
月曜日

回答:


682

babel-polyfill(Babel 7.4で非推奨)が必要です。async / awaitが機能するようにするには、それもインストールする必要があります。

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

package.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.config.jsCemenコメントに従って、それをwebpack構成ファイル(通常は)の配列の最初の値として配置する必要があります。

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

77
webpackでbabelを使用している場合は重要です:require("babel-polyfill")これを使用するのではなく"babel-polyfill"entryin configに次のように追加しますentry: ["babel-polyfill", "src/main.js"]。これは、HMRを備えたwebpack-dev-serverでの使用を含め、私にとってはうまくいきました。
Cemen 2015年

6
私はモバテストをbabel6と非同期で実行できるようにしようとしていて、--require babel-polyfillをnpmテストランナー構成に追加しなければなりませんでした
arisalexis

13
babel-registerの目的は何ですか?
trusktr 2016

6
@LloydはdevDependency、実行前にファイルを「コンパイル」するため、webpackを使用している場合。dependencywebpackを使用しておらず、バベルが必要な場合。
BrunoLM 2016

4
これにより、出力ファイルのサイズが非常に大きくなります... babel-polyfillを直接要求するのではなく、必要なものだけを使用することをお勧めします。
Inanc Gumus

341

ポリフィルの他に、babel-plugin-transform-runtimeを使用します。プラグインは次のように記述されます:

ヘルパーとビルトインへの参照を外部化し、グローバルを汚染することなくコードを自動的にポリフィルします。これは実際にはどういう意味ですか?基本的に、Promise、Set、Symbolなどのビルトインを使用するだけでなく、ポリフィルをシームレスに必要とするすべてのBabel機能を使用して、グローバルな汚染なしに、ライブラリに非常に適しています。

また、ES 6の他の組み込みに加えて、非同期/待機のサポートも含まれています。

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

.babelrc、ランタイムプラグインを追加します

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

babel 7を使用している場合、パッケージの名前は@ babel / plugin-transform-runtimeに変更されています


11
babel-runtime非同期で動作するのを待つ必要はありませんでした。あれは正しいですか?編集:サーバー側でコードを実行しています。:)
GijsjanB 2016

8
babel-runtimeなしで使用できたのは、依存関係ツリーに既にあるためです。したがって、ライブラリを作成していて、babel-runtimeがdevの依存関係として含まれている場合は、ユーザーには存在しない可能性があることに注意してください。これを配布の通常の依存関係として含める必要があります。
neverfox

23
babel-plugin-transform-runtime必要なだけです。魅力のように機能します。
saike 2016

9
このソリューションはrequiretransform-runtimeプラグインによって追加された呼び出しを展開するために追加のBrowserifyまたはWebpackジョブを必要とするため、問題です。
Finesse

9
Babel 7の場合、実行する必要があることに注意してくださいnpm install --save-dev @babel/plugin-transform-runtime
Andrey Semakin

197

Babel 7のユーザー

ほとんどの情報は以前のバベルバージョンに関するものでしたので、これを回避するのにいくつかの問題がありました。Babel 7の場合、次の2つの依存関係をインストールします。

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

そして、.babelrcに以下を追加します。

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

.babelrcなしで(
webpack構成

2
ドキュメント"plugins": ["@babel/plugin-transform-runtime"]では、"plugins": [ ["@babel/transform-runtime"] ]ここではなくとして使用法を示しています。異なるプラグイン名。どちらも機能します。しかし、どちらが適切なのでしょうか?..
kyw

5
このメソッドを実行すると、必要なものが定義されません
バットマン

1
@kyw常にドキュメントをフォローするのが最善です-慣習以外は違いません。
Matt Shirley、

4
@babel/transform-runtimeプラグインに追加すると、「エクスポートが定義されていません」というエラーが発生しました。私はそれを非同期にBabel7で動作させるためにこれに変更しました:["@babel/plugin-transform-runtime", { "regenerator": true } ]
Hari

105

更新

ターゲットを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

以下をバベル構成として使用します。

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

その後、アプリはChromeブラウザの最後の2つのバージョンで動作するはずです。

ノードをターゲットとして設定するか、ブラウザリストを次のように微調整することもできます。 https://github.com/ai/browserslistます。

教えてください、方法は教えないでください。

私はbabel-preset-envの哲学が本当に好きです。サポートしたい環境を教えてください。サポートする方法は教えないでください。それは宣言型プログラミングの美しさです。

私はテストasync awaitしましたが、動作します。私はそれらがどのように機能するのか知りませんし、本当に知りたくありません。代わりに、自分のコードとビジネスロジックに時間を費やしたいと考えています。おかげでbabel-preset-env、バベル構成の地獄から解放されます。


3
これは本当にうまくいきます。唯一の欠点は、引っ張られbabel-preset-envた依存関係の束ですが、それだけの価値があると思います。宣言的なスタイルも大好きです。またyarn installyarn add
ローマウシェレンコ2017年

1
@gargantuanはい、あります。
タイラーロング

3
そうでもないソリューションあなたがあればしたい古いブラウザまたはノードのバージョンを対象とします。
Rohan Orton

2
念のためそれが明白でない場合...コードがIE11で機能する必要がある場合、この推奨されるソリューションは機能しません
Maurice

7
なぜこれは非常に多くの賛成票を持っているのですか?これが機能するのは、非同期/待機を変換せず、したがってregeneratorRuntimeが不要になり、変換されないため、これをサポートしていないブラウザーでは機能しないためです。
Shikyo

47

または、babel-polyfill提供されるすべてのモジュールが必要ない場合babel-regenerator-runtimeは、webpack構成で指定するだけです。

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/...
Kitanotori

webpackを使用していない場合はどうなりますか?
バットマン、

38

私の簡単な解決策:

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

1
プラグインに「transform-async-to-generator」がありません。それを機能させるためにも追加する必要がありました
GabrielBB

@GabrielBB投稿を編集したので、完全な例です。
webnoob

2
されるloose: true必要?
トムセーデルランド

これを使用すると、ファイルにrequireが追加され、requireはブラウザーで未定義になります。
バットマン、

ルーズ:trueは必要ありません。.babelrcに本当に必要なのは、{"presets":["es2015"、 "react"、 "stage-2"]、 "plugins":["transform-runtime"、 "transform-async-to-generator "]}
Efe Ariaroo

29

Babel 7.4.0以降(core-js 2/3)

とおりバベル7.4.0@babel/polyfill される 非推奨

一般に、ポリフィル/再生器をインストールする方法は2つあります。グローバルネームスペースを使用する方法(オプション1)またはポニーフィル(オプション2、グローバルな汚染なし)です。


オプション1: @babel/preset-env

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

自動的に使用されます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

core-jsポリフィルを使用する場合は、インストールする@babel/runtime-corejs2か、@babel/runtime-corejs3代わりにこちらを参照してください

乾杯


2
これは正しい最新の回答であり、現在のプロジェクトで問題を解決するのに役立ちました。ありがとうございました!
cdpautsch

2
{"presets":[["@ babel / preset-env"、{"targets":{"esmodules":true}}]]}これは、node.jsビルドに役立ちました
Smolin Pavel

3
私はすでにそれを知っていましたが、他の人を助けるためにはこれが正しい答えになるはずです。宜しくお願いします!
NiewiadomskiPaweł19年

注:Babel 7スレッドを使用するのは理にかなっていると思うので、バージョン関連のエラーをより適切に区別できます。この回答のより具体的なバージョンをここで見つけることができます(ただし、上記のステートメントはまだ当てはまります)
ford04

16

babel-regenerator-runtime非推奨になりました。代わりにを使用してくださいregenerator-runtime

webpackおよびbabelv7でランタイムジェネレーターを使用するには:

インストールregenerator-runtime

npm i -D regenerator-runtime

次に、webpack構成内に追加します。

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

この受け入れ答えである必要があり、バベル-ポリフィルは、あまりにも多くの他のものを追加します
四鏡

私にとって完璧な仕事をしてください...ありがとうございました
Leandro William

1
ただし、このメソッドには常にランタイムが含まれます。ターゲットブラウザーに基づいてランタイムが動的に挿入されること@babel/preset-envの目的にuseBuiltIns反するものだと思います。
kyw

13

.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"
        }
      }
    ]
  ]
}

2
あなたの答えを説明していただけますか?"node": "current"の機能
Vishal Solanki

これが何をするのか、そしてそれが推奨される解決策であるかどうかも知りたいです-つまり、それは何も危険にさらすことはなく、(現時点では何でも可能な限り)将来の証拠です。 これtargetsを参照しているようです: the environments you support/target for your projectこれtargets.node次のとおりです: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
user1063287

FWIW、私は答えで定義された(そして"stage-0"プロセスで削除された)2番目のブロックを使用し、再生器エラーはなくなりました。
user1063287 2018年

1
@BunkerBoy便宜上、「node」:「current」を使用して、Babelを実行するために使用するNode.jsバージョンに必要なポリフィルと変換のみを含めることができます
Zero

このため、ポリフィルをインストールする必要はありませんか?
Vishal Solanki

12

巻き上げ機能に注意

「ポリフィルのインポート」と「非同期関数」の両方を同じファイルに入れましたが、ポリフィルの上にそれを巻き上げる関数構文を使用していたため、ReferenceError: regeneratorRuntime is not definedエラーが発生しました。

このコードを変更

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

これに

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

ポリフィルのインポートより上に持ち上げられるのを防ぐため。


5
a; kgjablrsdkjfjasnkljfbajklfdablkhjnfl;悲しい私は私の心を失っていた、そしてあなたは私を助けてくれた
John R Perry

11

2019年10月の時点でこれは私のために働きました:

これをプリセットに追加します。

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

次に、npmを使用してregenerator-runtimeをインストールします。

npm i regenerator-runtime

そして、あなたのメインファイルで:(このインポートは一度だけ使用されます)

import "regenerator-runtime/runtime";

これによりasync awaits、ファイルで使用して削除できますregenerator error


の値を設定しないuseBuiltInsと、デフォルトでになりますfalse。これは、ターゲット環境に応じてポリフィルを自動的にインポートしないため、の目的が多少損なわれ"@babel/preset-env"ます。ここにも、バベル開発者の1人による関連コメントがあります。
bela53

10

使用する場合babel-preset-stage-2は、でスクリプトを開始する必要があります--require babel-polyfill

私の場合、このエラーはMochaテストによってスローされました。

問題を修正した後

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


9

プロジェクトをtypescriptプロジェクトに変換した後、このエラーが発生し始めました。私が理解しているところによると、問題はasync / awaitが認識されないことが原因です。

私にとっては、セットアップに次の2つを追加することでエラーが修正されました。

  1. 上で何度も触れたように、webpackエントリ配列にbabel-polyfillを追加する必要がありました。

    ...
    
    エントリ:['babel-polyfill'、 './index.js']、
    
    ...
  2. ジェネレーターへの非同期/待機のコンパイルを許可するために.babelrcを更新する必要がありました:

    {
      "プリセット":["es2015"]、
      "プラグイン":["transform-async-to-generator"]
    }

DevDependencies:

また、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要旨からコードを入手しました


3
env代わりにプリセットを使用することをお勧めしますes2015。すでにenv含まれes2015ています。
神経伝達物質

9

Chromeでこの問題が発生しました。RienNeVaPlu͢sの答えと同様に、これは私のためにそれを解決しました:

npm install --save-dev regenerator-runtime

次に、私のコードで:

import 'regenerator-runtime/runtime';

からの余分な200 kBを避けてくださいbabel-polyfill


9

このエラーはasync/await、適切なBabelプラグインなしで関数が使用された場合に発生します。2020年3月の時点で、次のことを行う必要があります。(@babel/polyfillそして承認されたソリューションの多くはBabelで非推奨になりました。Babelのドキュメントで詳細を読んでください

コマンドラインで、次のように入力します。

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開発者は、機能を廃止することを決定しましたが、これが問題になると予想するかもしれません。最も可能性の高い意図は何か、それを修正するために何をすべきかを人々に知らせないのはなぜですか。しかし、いいえ、初心者には絶対に役に立たないメッセージを表示しましょう。
Pavel Voronin

これは動作しませんimgur.com/a/2Ea8WDk
そうもない

私にとってはうまくいきました。私の非反応プロジェクト.babelrcは次のようになります: `` `{" presets ":[" @ babel / preset-env "]、" plugins ":[" @ babel / plugin-transform-runtime "]}` ``
Anthony

8

async / awaitがES2015ではなくES2016の機能であるジェネレータを使用するため、エラーが発生します。これを修正する1つの方法は、ES2016(npm install --save babel-preset-es2016)のバベルプリセットをインストールし、ES2015ではなくES2016にコンパイルすることです。

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

他の回答が述べているように、ポリフィルを使用することもできます(ただし、他のコードを実行する前に、まずポリフィルロードしてください)。あるいは、すべてのポリフィル依存関係を含めたくない場合は、babel-regenerator-runtimeまたはbabel-plugin-transform-runtimeを使用できます


7

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';

テストに含めた-テストスクリプトにbabel-polyfillが必要

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

6

新しい回答なぜ私の回答をフォローするのですか?

回答最新の更新バージョンnpmプロジェクトで回答をお届けするためです。

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"

このバージョン以上のNpmのUPバージョンを使用している場合... SOを変更するだけです。

webpack.config.js

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

変更後のwebpack.config.jsファイルこの行をコードの先頭に追加するだけです。

import "babel-polyfill";

すべてが問題ないことを確認してください。参考リンク

また、@ BrunoLMの素敵な回答にも感謝します。


1
それがバックエンドサービスである場合、なぜ彼はwebpackを使用するのですか?あなたの答えは、彼がウェブパックを使わなければならないことを意味しますか?
Spock

1
@スポック、私はそれについて考えました。私は同じ問題に直面していて、この単純な方法で問題を解決しました。私はそれがWebpackユーザーにとって肯定的な答えだと思います。他の人をフォローできるように、正解がもっとあります。
MD Ashik、2017年

なぜあなたは投票を押し下げる必要があるのですか!!!! あなたが私を助けたいなら、理由を言うことができますか?
MD Ashik

6

私がサポートする必要のある対象のブラウザは、すでに非同期/待機をサポートしていますが、適切な設定を行わずにモカテストを作成すると、このエラーが発生します。

私はGoogleで記事のほとんどは、受け入れ答えと高を含め、古いされ、ここで答えを投票し、すなわち、あなたは必要ありませんpolyfillbabel-regenerator-runtimebabel-plugin-transform-runtime。など、あなたのターゲットブラウザ(複数可)は既に非同期/のawaitをサポートしていれば(もちろんそうでない場合は、あなたがポリフィルを必要とします)

webpackどちらも使いたくない。

タイラーロングの答えは、彼が提案して以来、実際には正しい方向にbabel-preset-env進んでいます(ただし、最初にポリフィルについて言及したので、最初は省略しました)。私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
      }]
    ]
  }


4

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バベルポリフィルを追加します。

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/


3

私は、webpackを使用してセットアップ
行いpresets: ['es2015', 'stage-0']
mochaがwebpackでコンパイルされたテストを実行していました。

async/awaitテストを機能させるには、mocha --require babel-polyfillオプションを追加するだけです。


3

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 install babel-polyfill --save

そしてそれをindex.htmlの依存関係として追加します:

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

ありがとうございました。これでうまくいきました。クライアント側で機能するためにスクリプトタグを追加する必要があることを知りませんでした。
Raza

3

babel-polyfillバージョン7の使用を検討している人のために、これを次のようにしてください。webpack ver3で。

Npmモジュールをインストールします npm i -D @babel/polyfill

次に、あなたのwebpackファイルのあなたのentryポイントでこれを行います

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

3

再生器ランタイムと反応するための私の作業中のbabel 7ボイラープレート:

.babelrc

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

package.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";

....

2

アプリを構築している場合は、@babel/preset-envおよびが必要です@babel/polyfill

npm i -D @babel/preset-env
npm i @babel/polyfill

(注:core-jsregenerator-runtimeパッケージはどちらも@ babel / polyfillによってインストールされるため、インストールする必要はありません)

次に.babelrc

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "entry"  // this is the key. use 'usage' for further codesize reduction, but it's still 'experimental'
      }
    ]
  ]
}

次に、ターゲット環境を設定します。ここでは、.browserslistrcファイルでそれを行います。

# Browsers that we support

>0.2%
not dead
not ie <= 11
not op_mini all

最後に、あなたがと一緒useBuiltIns: "entry"に行った場合は、import @babel/polyfillは、エントリファイルの先頭にします。それ以外の場合は、完了です。

この方法を使用すると、ターゲット環境/ブラウザーで必要な場合にのみ、これらのポリフィルと「再生器ランタイム」ファイル(regeneratorRuntime is not definedここで問題を修正)が選択的にインポートされます。


2

今後の参考のために

Babelバージョン7.0.0-beta.55以降、ステージプリセットは削除されました

ブログを参照してくださいhttps://babeljs.io/blog/2018/07/27/removing-babels-stage-presets

async awaitはまだ使用できます

https://babeljs.io/docs/en/babel-plugin-transform-async-to-generator#usage

インストール

npm install --save-dev @babel/plugin-transform-async-to-generator

.babelrcでの使用

 { 
     "presets": ["@babel/preset-env"],
     "plugins": ["@babel/plugin-transform-async-to-generator"]
 }

バベルポリフィルを使用するhttps://babeljs.io/docs/en/babel-polyfill

インストール

npm install --save @babel/polyfill

webpack.config.js

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

2

2019ではBabel 7.4.0+babel-polyfillパッケージが非推奨になり、core-js/stablecore-js@3+、ECMAScript機能をポリフィルするregenerator-runtime/runtimeために)および(トランスパイルされたジェネレーター関数を使用する必要がある)を直接含めるようになりました:

import "core-js/stable";
import "regenerator-runtime/runtime";

babel-polyfill ドキュメントからの情報。


2

コンソールでこの「regeneratorRuntime not defined issue」を修正する最も簡単な方法:

不要なプラグインをインストールする必要はありません。追加するだけです:

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

index.htmlの本文の内側。これで、babelを実行するとregeneratorRuntimeが定義され、非同期/待機関数がES2015に正常にコンパイルされるようになります。


1

フロントエンドにGulp + Babelを使用している場合は、babel-polyfillを使用する必要があります

npm install babel-polyfill

次に、他のすべてのスクリプトタグの上にindex.htmlにスクリプトタグを追加し、node_modulesからbabel-polyfillを参照します


反対票とコメントの理由がわかりません。私はそれをFirefoxブラウザ用に欲しかった。また、私はbabelウェブサイト自体から直接情報を取得しました。コメントを試しても問題は解決しませんでした。
Petros Kyriakou 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.