Babel 6 regeneratorRuntime tanımlanmamış


634

Async kullanmaya çalışıyorum, Babel 6'da sıfırdan bekliyorum, ancak regeneratorRuntime tanımlanmıyorum.

.babelrc dosyası

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

package.json dosyası

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

.js dosyası

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

Async / await olmadan normal olarak kullanmak gayet iyi çalışıyor. Yanlış yaptığım hakkında bir fikrin var mı?


Rejeneratör eklediniz mi?
ssube

3
babel-polyfill ihtiyacınız olan şey.
Ronnie Royston

babil-polyfill 7.4 itibariyle amortismana tabi tutuldu; bu güncelleme, gönderi geçişi açıklar.
JWCS

Babil ve düğümün daha yeni sürümlerini kullananlar için: stackoverflow.com/a/62254909/8169904
Pzt

Yanıtlar:


682

babel-polyfill( Babil 7.4 itibarıyla kullanımdan kaldırılmıştır ) gereklidir. Ayrıca, zaman uyumsuz / çalışmayı beklemek için yüklemeniz gerekir.

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

asenkron / beklemeli .js (örnek kod)

"use strict";

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

function bar() {
  return "bar";
}

Başlangıç ​​dosyasında

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

Webpack kullanıyorsanız, @Cemen yorumuna göreentry webpack yapılandırma dosyanızda (genellikle webpack.config.js) dizinizin ilk değeri olarak koymanız gerekir :

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

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

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

Babil ile test yapmak istiyorsanız şunu kullanın:

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

77
Eğer WebPack ile Babel kullanırken Önemli: yerine kullanarak require("babel-polyfill")çalışmıyor, hangi eklemek "babel-polyfill"için içine entryconfig böyle: entry: ["babel-polyfill", "src/main.js"]. Bu benim için çalıştı, HMR ile webpack-dev-server'da kullanım dahil.
Cemen

6
Mocha testlerimi babel6 ve async ile çalıştırmak için çalışıyordum ve npm test koşucusu yapılandırmasına --require babel-polyfill eklemek zorunda kaldım
arisalexis

13
Babel-register ne için?
trusktr

6
@Lloyd webpack devDependencykullanıyorsanız çünkü çalıştırmadan önce dosyaları "derleyecektir". dependencywebpack kullanmıyorsanız ve babel gerekiyorsa.
BrunoLM

4
Bu, çıktı dosyasının boyutunu çok büyük yapar ... Doğrudan babil-polyfill yerine sadece ihtiyacınız olanı kullanmak daha iyidir.
İnanç Gümüş

340

Polyfill'in yanı sıra babel-plugin-transform-runtime kullanıyorum . Eklenti şu şekilde tanımlanır:

Globalleri kirletmeden kodunuzu otomatik olarak çoklu doldurarak yardımcılara ve yerleşiklere referansları dışlayın. Bu aslında ne anlama geliyor? Temel olarak, Promise, Set, Symbol vb gibi yerleşik bileşenleri kullanabilir ve küresel kirlilik olmadan çoklu dolum gerektiren tüm Babel özelliklerini sorunsuz bir şekilde kullanabilir ve kütüphaneler için son derece uygun hale getirebilirsiniz.

Ayrıca ES 6'nın diğer yerleşikleriyle birlikte zaman uyumsuz / beklemede destek içerir.

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

Alanına .babelrc, çalışma zamanı eklentisini ekleyin

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

Not babel 7 kullanıyorsanız, paket @ babel / plugin-transform-runtime olarak yeniden adlandırılmıştır .


11
babel-runtimeAsync'in çalışmasını beklemesine gerek yoktu . Bu doğru mu? Düzenleme: Kod sunucusu tarafı çalıştırıyorum. :)
GijsjanB

8
Babel-runtime olmadan kullanabildiyseniz, zaten bağımlılık ağacınızda olduğu için. Dolayısıyla, bir kitaplık yazıyorsanız ve babel-runtime'ın geliştirici bir bağımlılık olarak geliyorsa, kullanıcılarınız için orada olmayabilir. Normal dağıtım bağımlılığı olarak eklemeniz gerekir.
neverfox

23
sadece babel-plugin-transform-runtimegerekli. Tıkır tıkır çalışıyor.
16'da saike

9
Eklenti requiretarafından eklenen aramaları genişletmek için fazladan bir Browserify veya Webpack işi gerektirdiğinden bu çözüm uygun değildir transform-runtime.
Finesse

9
Babel 7 için npm install --save-dev @babel/plugin-transform-runtime
koşmanız

197

Babel 7 Kullanıcıları

Çoğu bilgi önceki babel sürümleri için olduğundan bu konuda biraz sorun yaşadım. Babel 7 için şu iki bağımlılığı yükleyin:

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

Ve .babelrc'de şunu ekleyin:

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

.Babelrc olmadan nasıl yapabiliriz (sadece webpack yapılandırma dosyasını kullanarak)
Pouya Jabbarisani

2
Doküman kullanımı burada "plugins": ["@babel/plugin-transform-runtime"]değil, olarak gösterir "plugins": [ ["@babel/transform-runtime"] ]. Farklı eklenti adı. Her ikisi de çalışır. Ama hangisi uygun olanı? ..
kyw

5
Ben bu yöntemi izlerken ihtiyaç tanımlanmış değil
Batman

1
@kyw her zaman dokümanları takip etmek için en iyisidir - konvansiyondan başka bir fark yoktur.
Matt Shirley

4
@babel/transform-runtimeEklentilere eklemek benim için "dışa aktarma tanımlanmadı" hatasına neden oldu. Babel7'de çalışmak için zaman uyumsuzluk almak için bunu değiştirdim:["@babel/plugin-transform-runtime", { "regenerator": true } ]
Hari

105

Güncelleme

Hedefi Chrome olarak ayarlarsanız çalışır. Ancak diğer hedefler için işe yaramayabilir, lütfen şuna bakın: https://github.com/babel/babel-preset-env/issues/112

Yani bu cevap orijinal soru için tam olarak uygun DEĞİLDİR . Burada bir referans olarak tutacağımbabel-preset-env .

Basit bir çözüm eklemektir import 'babel-polyfill' kodunuzun başına .

Webpack kullanıyorsanız, babel-polyfillaşağıda gösterildiği gibi hızlı bir çözüm eklemektir :

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

En son en iyi uygulamayı bulduğuma inanıyorum.

Bu projeyi kontrol edin: https://github.com/babel/babel-preset-env

yarn add --dev babel-preset-env

Babil yapılandırmanız olarak aşağıdakileri kullanın:

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

Ardından, uygulamanızın Chrome tarayıcısının son 2 sürümüne geçmesi iyi olmalıdır.

Ayrıca Düğümü hedef olarak ayarlayabilir veya tarayıcı listesine https://github.com/ai/browserslist adresine göre ince ayar yapabilirsiniz.

Bana ne olduğunu söyle, nasıl olduğunu söyleme.

babel-preset-envFelsefesini gerçekten çok seviyorum : Bana hangi ortamı desteklemek istediğinizi söyleyin, bana onları nasıl destekleyeceğimi söyleme. Bu, bildirimsel programlamanın güzelliğidir.

Test ettim async awaitve işe yarıyorlar. Nasıl çalıştıklarını bilmiyorum ve gerçekten bilmek istemiyorum. Zamanımı kendi kodumla ve iş mantığımla geçirmek istiyorum. Bu sayede babel-preset-envbeni Babil konfigürasyon cehenneminden kurtarıyor.


3
Bu gerçekten işe yarıyor. Sadece olumsuz, çekti bağımlılıklar bir grup babel-preset-envama buna değer olduğunu düşünüyorum. Beyan tarzını da seviyorum. Ayrıca yarn installşimdiyarn add
Roman Usherenko

1
@gargantuan Evet öyle.
Tyler Long

3
Eski tarayıcıları veya düğüm sürümlerini hedeflemek istiyorsanız gerçekten bir çözüm değildir .
Rohan Orton

2
Belli olmasa bile .... IE11'de çalışmak için kodunuza ihtiyacınız varsa bu önerilen çözüm işe yaramaz
Maurice

7
Bunun neden bu kadar çok oyu var? Bu yalnızca, zaman uyumsuzluğu / beklemeyi dönüştürmediği ve bu nedenle artık regeneratorRuntime'a ihtiyaç duymadığı ve dönüştürülmediği için desteklemeyen tarayıcılarda çalışmaz.
Shikyo

47

Alternatif olarak, sağlanan tüm modüllere ihtiyacınız yoksa , webpack yapılandırmanızda şunları babel-polyfillbelirtebilirsiniz babel-regenerator-runtime:

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

  // ...
};

HMR ile webpack-dev-server kullanırken, bunu yapmak her derlemede derlemek zorunda olduğu dosya sayısını oldukça azalttı. Bu modül bir parçası olarak monte edilmiştir, babel-polyfillbu yüzden zaten iyi durumdaysanız, aksi takdirde ile birlikte kurabilirsiniz npm i -D babel-regenerator-runtime.


Bu en uygun çözüm gibi görünüyor. Bununla birlikte, çoğu tarayıcı jeneratörleri destekler, bu nedenle bu çözüm muhtemelen en uygun çözüm değildir. Bakınız: blogs.candoerz.com/question/213492/…
Kitanotori

Web paketini kullanmıyorsanız ne olacak?
Batman

38

Benim basit çözümüm:

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
Eklentilerde "dönüşüm-zaman uyumsuz-oluşturucu" eksik. Çalışması için de eklemek zorunda kaldım
GabrielBB

@GabrielBB Gönderiyi düzenledim, bu yüzden tam bir örnek.
webnoob

2
Is loose: truegerekli?
Tom Söderlund

Bunu kullanırken dosyama gerektirir ekler ve gerektirir tarayıcıda tanımsız.
Batman

gevşek: true gerekli DEĞİLDİR. .Babelrc'nizde gerçekten ihtiyacınız olan şey: {"presets": ["es2015", "tepki", "stage-2"], "plugins": ["transform-runtime", "transform-async-to-generator "]}
Efe Ariaroo

29

Babel 7.4.0 veya üstü (core-js 2/3)

İtibariyle Babil 7.4.0 , @babel/polyfill bir kullanımdan kaldırıldı .

Genel olarak, çoklu dolgular / rejeneratör kurmanın iki yolu vardır: küresel ad alanı (Seçenek 1) veya ponyfill (Seçenek 2, küresel kirlilik olmadan).


Seçenek 1: @babel/preset-env

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

otomatik olarak kullanır regenerator-runtimeve hedefinizecore-js göre . Elle herhangi bir şey içe aktarmaya gerek yoktur. Çalışma zamanı bağımlılıklarını yüklemeyi unutmayın:

npm i --save regenerator-runtime core-js

Alternatif olarak, useBuiltIns: "entry"manuel olarak ayarlayın ve içe aktarın:

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

2. Seçenek: @babel/transform-runtime ile @babel/runtime(hayır küresel kapsam kirliliği)

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

Yükle:

npm i -D @babel/plugin-transform-runtime
npm i @babel/runtime

Core-js polyfills kullanıyorsanız @babel/runtime-corejs2veya @babel/runtime-corejs3yerine yüklersiniz, buraya bakın .

Şerefe


2
Bu doğru, en güncel cevaptır ve mevcut projemde bir sorunla ilgili bana yardımcı oldu. Teşekkür ederim!
cdpautsch

2
{"presets": [["@ babel / preset-env", {"targets": {"esmodules": true}}]]} Bu bir node.js derlemesi için bana yardımcı oldu
Smolin Pavel

3
Yani bunu zaten biliyordum ama başkalarına yardım etmek için doğru cevap bu olmalı. Saygılarımla!
Niewiadomski Paweł

Not: Bence, Babel 7 iş parçacığını kullanmak mantıklı , bu nedenle sürümle ilgili hatalar daha iyi ayırt edilebilir. Bu cevabın daha spesifik bir versiyonunu burada bulabilirsiniz (ancak yukarıdaki ifadeler hala geçerli)
ford04

16

babel-regenerator-runtimeartık kullanımdan kaldırılmıştır , bunun yerine kullanıcı kullanmalıdır regenerator-runtime.

Çalışma zamanı üreticisini webpackve babelv7 ile kullanmak için :

yüklemek regenerator-runtime:

npm i -D regenerator-runtime

Ve sonra web paketi yapılandırmasına ekleyin:

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

Bu kabul edilen cevap olmalı, babel-polyfill çok daha fazla şey ekliyor
Shikyo

Benim için mükemmel çalış ... Çok teşekkürler
Leandro William

1
Bu yöntem her zaman çalışma zamanını içerir. Bunun amacı yendi inanıyoruz @babel/preset-envs' useBuiltInsdinamik hedef tarayıcılar dayalı çalışma zamanını eklemelerini.
kyw

13

Güncelleyin .babelrcDosyanızı aşağıdaki örneklere göre , çalışacaktır.

@babel/preset-envPaket kullanıyorsanız

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

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

2
lütfen cevabınızı açıklar mısınız? ne "düğüm": "şu anki" ne yapar
Vishal Solanki

Ben de bunun ne yaptığını ve önerilen bir çözüm olup olmadığını bilmek istiyorum - yani hiçbir şey tehlikeye atmaz ve "gelecekteki kanıtı" (şu anda bir şey olabildiğince). targetsgörünüyor başvurmak için bu : the environments you support/target for your project, iken targets.nodeolduğu bu : 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, cevapta tanımlanan ikinci bloğu kullandım (ve "stage-0"işlemde kaldırıldı ) ve rejeneratör hatası gitti.
user1063287

1
@BunkerBoy Kolaylık sağlamak için, "node": "current" komutunu kullanarak Babel
Zero

bunun için çoklu dolgular kurmak zorunda değilim?
Vishal Solanki

12

Kaldırılmış fonksiyonlara dikkat edin

Aynı dosyada hem 'çoklu dolgumu içe aktarma' hem de 'eşzamansız işlevim' vardı, ancak bana verecek olan çoklu dolgunun üstünde kaldıran işlev sözdizimini kullanıyordum ReferenceError: regeneratorRuntime is not defined hata .

Bu kodu değiştir

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

buna

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

çoklu dolgu ithalatının üzerine çekilmesini önlemek için.


5
a; kgjablrsdkjfjasnkljfbajklfdablkhjnfl; üzgün Aklımı kaybediyordum ve beni kurtardın Seni seviyorum
John R Perry

11

Ekim 2019'dan itibaren bu benim için çalıştı:

Bunu ön ayara ekleyin.

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

Sonra npm kullanarak regenerator-runtime'ı kurun.

npm i regenerator-runtime

Ve sonra ana dosya kullanımınızda: (bu içe aktarma yalnızca bir kez kullanılır)

import "regenerator-runtime/runtime";

Bu, async awaitsdosyanızda kullanmanıza veregenerator error


İçin bir değer ayarlanmıyorsa useBuiltInsvarsayılan olarak ayarlanır false. Bu, hedef ortama bağlı olarak, amacı zayıflatan herhangi bir çoklu dolguyu otomatik olarak içe aktarmaz "@babel/preset-env". İşte babel geliştiricilerinden biri tarafından ilgili bir yorum.
bela53

10

Kullanıyorsanız babel-preset-stage-2, komut dosyasını ile başlatmanız yeterlidir --require babel-polyfill.

Benim durumumda bu hata Mochatestlerle atıldı .

Aşağıdaki sorun giderildi

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


9

Projemi bir daktilo projesine dönüştürdükten sonra bu hatayı almaya başladım. Anladığım kadarıyla, sorun async / beklemekten kaynaklanıyor.

Benim için hata, kurulumuma iki şey ekleyerek düzeltildi:

  1. Yukarıda defalarca belirtildiği gibi, webpack giriş dizime babel-polyfill eklemem gerekiyordu:

    ...
    
    giriş: ['babel-polyfill', './index.js'],
    
    ...
  2. Async / await jeneratörlere complilation izin vermek için benim .babelrc güncelleştirmek gerekiyordu:

    {
      "hazır ayarlar": ["es2015"],
      "plugins": ["zaman uyumsuz-jeneratöre dönüştürme"]
    }

DevDependencies:

DevDependencies'e benim package.json dosyamda da birkaç şey yüklemem gerekiyordu. Yani, babel-plugin-transform-async-to-generator, babel-polyfill ve babel-preset-es2015'i kaçırıyordum:

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

Tam Kod Özeti:

Kodu burada bulabileceğiniz gerçekten yararlı ve özlü bir GitHub gist'ten aldım .


3
Bunun envyerine ön ayar kullanmak daha iyidir es2015. enviçerir es2015.
Nörotransmiter

9

Bu sorunu Chrome'da yaşadım. RienNeVaPlu͢s'un cevabına benzer şekilde, bu benim için çözdü:

npm install --save-dev regenerator-runtime

Sonra benim kod:

import 'regenerator-runtime/runtime';

Ekstra 200 KB'den kaçınmaktan mutluluk duyarız babel-polyfill.


8

Bir hata alıyorsunuz, çünkü zaman uyumsuz / beklemede ES2016 değil, ES2016 özelliği olan jeneratörler kullanılıyor. Bunu düzeltmenin bir yolu, ES2016 ( npm install --save babel-preset-es2016) için babel ön ayarını yüklemek ve ES2015 yerine ES2016'ya derlemektir:

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

Diğer cevaplarda belirtildiği gibi, çoklu dolgular da kullanabilirsiniz (ancak diğer kod çalıştırmadan önce çoklu dolguyu yüklediğinizden emin olun ). Alternatif olarak, tüm çoklu dolgu bağımlılıklarını dahil etmek istemiyorsanız, babel-reenerator-runtime veya babel-plugin-transform-runtime'ı kullanabilirsiniz .


8

Bu hata, async/awaitişlevler uygun Babel eklentileri olmadan kullanıldığında ortaya çıkar . Mart 2020 itibariyle, yapmanız gereken tek şey aşağıdakiler olmalıdır. ( @babel/polyfillve kabul edilen çözümlerin birçoğu Babel'de kullanımdan kaldırılmıştır. Babel belgelerinde daha fazla bilgi edinin . )

Komut satırına şunu yazın:

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

Senin de babel.config.jsdosyaya, bu eklentisini @babel/plugin-transform-runtime. Not: Aşağıdaki örnek, yakın zamanda üzerinde çalıştığım küçük bir React / Node / Express projesi için sahip olduğum diğer hazır ayarları ve eklentileri içerir:

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

Beni her zaman şaşırtan şey, geliştiricilerin tembel olmaları. Babel devs işlevselliği reddetmeye karar verdi, bunun bir sorun olmasını bekleyebilirler. Neden insanların en olası niyet olduğunu ve bunu düzeltmek için ne yapmaları gerektiğini bilmelerine izin vermiyoruz. Ama hayır, hadi yeni başlayanlar için gereksiz bir şekilde işe yaramayacak bir mesaj gösterelim.
Pavel Voronin

Bu işe yaramazsa imgur.com/a/2Ea8WDk
imkansız

Benim için harika çalıştı. Reaksiyona girmeyen projem .babelrcşöyle görünüyor: `` {"presets": ["@ babel / preset-env"], "plugins": ["@ babel / plugin-transform-runtime"]} ``
Anthony

7

Babel-polyfill'i yükleyerek bu hatayı düzelttim

npm install babel-polyfill --save

daha sonra uygulamayı giriş noktama aktardım

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

test için dahil ettim - test betiğime babel-polyfill gerekli

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

6

Yeni Cevap Cevabımı neden takip ediyorsunuz?

Ans: Çünkü size en son Güncelleme sürümü npm projesiyle bir cevap vereceğim.

2017/04/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"

Eğer Npm ve diğer tüm bu sürümü veya daha fazla UP sürümünü kullanın ... SO sadece değiştirmeniz gerekir:

webpack.config.js

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

webpack.config.jsDosyaları değiştirdikten sonra bu satırı kodunuzun üstüne ekleyin.

import "babel-polyfill";

Şimdi her şeyin yolunda olduğunu kontrol edin. Referans LINK

Ayrıca onun güzel cevap için teşekkürler # BrunoLM.


1
Neden bir arka uç hizmeti ise web paketini kullansın ki? Cevabınız web paketini kullanmak zorunda olduğunu mı ima ediyor?
Spock

1
@Spock, bunu düşündüm. Aynı problemle karşılaşıyordum ve problemimi bu kadar basit bir şekilde çözdüm. Bence bu Webpack kullanıcısı için olumlu cevap ve tavşan daha fazla Doğru Yanıt var, böylece başkalarını takip edebilirsiniz.
MD Ashik

Neden oy bastırmanız gerekiyor şey !!!! Bana yardım etmek istiyorsan neden söyleyebilir misin?
MD Ashik

6

Desteklemem gereken hedeflenen tarayıcılar zaten async / bekliyor, ancak mocha testleri yazarken, uygun ayar olmadan hala bu hatayı aldım.

Ben googled makalelerin çoğu kabul cevap ve yüksek İhtiyacınız olmayan, burada ie cevapları olarak dahil güncelliğini yitirmiş durumda polyfill, babel-regenerator-runtime, babel-plugin-transform-runtime. vb Hedef tarayıcı (ler) zaten destekliyorsa zaman uyumsuz / bekliyoruz (tabii değil polyfill gerekirse)

Ben de kullanmak istemiyorum webpack.

Tyler Long'un cevabı, önerdiğinden beri aslında doğru yolda babel-preset-env(ancak başlangıçta polifilden bahsettiğinden önce atladım). Hâlâ ReferenceError: regeneratorRuntime is not definedilk başta anladım, çünkü hedefi belirlemediğim için bunun farkına vardım. Düğüm için hedef belirledikten sonra regeneratorRuntime hatasını düzeltirim :

  "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-modüle-yöntemi, babel-polyfil, bluebird, babel-preset-es2015, babel-core yükleyin:

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

2 - Js babel çoklu dolgunuzu ekleyin:

import 'babel-polyfill';

3 - .babelrc'nize eklenti ekleyin:

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

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


3

Webpack kullanarak ve mocha
ile bir kurulum yaptımpresets: ['es2015', 'stage-0']
webpack tarafından derlenen testleri çalıştıran yaptım.

Benim yapmak için async/awaittestlerde yapmam gereken işe eklenti olan mocha --require babel-polyfillseçeneği.


3

ES6 jeneratörlerini kullanmaya çalıştığımda bu hatayı toplama ile yudum kullanarak alıyorum:

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 }));
});

Ben çözüm babel-polyfillbower bileşeni olarak dahil etmek durumunda olabilir :

bower install babel-polyfill --save

ve index.html dosyasına bağımlılık olarak ekleyin:

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

Teşekkür ederim. Bu benim için çalıştı. Istemci tarafında çalışması için komut dosyası etiketi eklemek gerektiğini bilmiyordum.
Raza

3

babel-polyfill7 ^ sürümünü kullanmak isteyenler için bunu webpackver3 ^ ile yapın.

Npm modülü takın npm i -D @babel/polyfill

Sonra webpackdosyasında kendi entrynoktanızda bunu yapın

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

3

Benim rejeneratör çalışma zamanı ile tepki için çalışma babel 7 boilerplate:

.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

Bir uygulamayı inşa ediyoruz, sadece ihtiyaç @babel/preset-envve @babel/polyfill:

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

(Not: core-jsveregenerator-runtime paketlerini çünkü ikisi de @ babel / polyfill tarafından yüklenecektir)

Sonra .babelrc:

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

Şimdi hedef ortamlarınızı ayarlayın. Burada, .browserslistrcdosyada yapıyoruz :

# Browsers that we support

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

Son olarak, gittiyseniz useBuiltIns: "entry", import @babel/polyfillgiriş dosyanızın en üstüne koyun . Aksi takdirde, işiniz bitti.

Bu yöntemi kullanmak, SADECE hedef ortamlarınızdan / tarayıcılarınızdan herhangi biri tarafından ihtiyaç duyuluyorsa, bu çoklu dolguları ve 'rejeneratör çalışma zamanı' dosyasını seçerek içe aktarır ( regeneratorRuntime is not definedsorununuzu burada giderir).


2

ileride başvurmak için :

Babel sürüm 7.0.0-beta.55 aşaması ön ayarları kaldırıldı

bkz. blog https://babeljs.io/blog/2018/07/27/removing-babels-stage-presets

async bekliyor hala tarafından kullanılabilir

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

Kurulum

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

.babelrc içinde kullanım

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

ve babil polyfill kullanarak https://babeljs.io/docs/en/babel-polyfill

Kurulum

npm install --save @babel/polyfill

webpack.config.js

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

2

2019 yılında Babel 7.4.0+, babel-polyfillpaket doğrudan core-js/stable( core-js@3+ECMAScript özelliklerini regenerator-runtime/runtimeçoklu doldurmak için ) ve (aktarılan jeneratör işlevlerini kullanmak için gerekli ) lehine kullanımdan kaldırılmıştır :

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

Alınan bilgiler babel-polyfill belgeler .


2

Konsolunuzdaki bu 'regeneratorRuntime tanımlanmadı sorununu' çözmenin en kolay yolu:

Gereksiz eklentiler kurmanız gerekmez. Sadece ekle:

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

index.html dosyasında gövdenin içine yerleştirin. Şimdi baben çalıştırıldıktan sonra regeneratorRuntime tanımlanmalıdır ve şimdi async / await işlevleriniz başarıyla ES2015'e derlenmelidir


1

Bir kullanıcı arabirimi için Gulp + Babel kullanıyorsanız babel-polyfill kullanmanız gerekir

npm install babel-polyfill

ve sonra index.html dosyasına diğer tüm komut dosyası etiketlerinin üzerine bir komut dosyası ekleyin ve düğüm_modüllerinden babel-polyfill'e bakın


Neden yoksunluk ve yorum görmüyorum. Firefox tarayıcısı için istedim. Ayrıca doğrudan babel web sitesinden bilgi aldı. Yorum, denediğimde sorunu çözmeme yardımcı olmadı.
Petros Kyriakou
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.