Ich habe gerade angefangen, Babel zu verwenden, um meinen ES6-Javascript-Code in ES5 zu kompilieren. Wenn ich Promises benutze, sieht es so aus, als würde es nicht funktionieren. Auf der Babel-Website wird die Unterstützung von Versprechungen über Polyfills angegeben.
Ohne Glück versuchte ich hinzuzufügen:
require("babel/polyfill");
oder
import * as p from "babel/polyfill";
Damit erhalte ich beim Bootstrapping meiner App den folgenden Fehler:
Modul 'babel / polyfill' kann nicht gefunden werden
Ich habe nach dem Modul gesucht, aber es scheint, dass mir hier etwas Grundlegendes fehlt. Ich habe auch versucht, das alte und gute Bluebird NPM hinzuzufügen, aber es sieht so aus, als würde es nicht funktionieren.
Wie verwende ich die Polyfills von Babel?
npm install _name_
npm install --save babel-polyfill
undrequire('babel-polyfill)
.Antworten:
Dies hat sich in babel v6 etwas geändert.
Aus den Dokumenten:
Installation:
$ npm install babel-polyfill
Verwendung in Node / Browserify / Webpack:
Um die Polyfüllung einzuschließen , müssen Sie sie oben am Einstiegspunkt Ihrer Anwendung benötigen.
require("babel-polyfill");
Verwendung im Browser:
Verfügbar aus der
dist/polyfill.js
Datei innerhalb einerbabel-polyfill
npm-Version. Dies muss vor dem gesamten kompilierten Babel-Code enthalten sein. Sie können es entweder Ihrem kompilierten Code voranstellen oder in a einfügen<script>
davor stehenden .HINWEIS:
require
Verwenden Sie dies nicht über browserify usw., verwenden Siebabel-polyfill
.quelle
Array.protorype.findIndex()
aber nicht ohne Polyfill, und babel löst beim Transpilieren keine Ausnahme aus? Ist das die Natur eines Polyfill ™?Die Babel-Dokumente beschreiben dies ziemlich kurz:
Stellen Sie sicher, dass Sie es am Einstiegspunkt Ihrer Anwendung benötigen, bevor etwas anderes aufgerufen wird. Wenn Sie ein Tool wie Webpack verwenden, wird dies ziemlich einfach (Sie können Webpack anweisen, es in das Bundle aufzunehmen).
Wenn Sie ein Tool wie
gulp-babel
oder verwendenbabel-loader
, müssen Sie auch dasbabel
Paket selbst installieren , um die Polyfüllung zu verwenden.Beachten Sie auch, dass Sie für Module, die sich auf den globalen Bereich auswirken (Polyfills und dergleichen), einen knappen Import verwenden können, um zu vermeiden, dass nicht verwendete Variablen in Ihrem Modul enthalten sind:
quelle
import 'babel-core/polyfill'
ohne Installation zu verwenden,babel
und es hat gut funktioniert.import 'babel-core/polifyll'
funktioniert es. Ich habe es ohne Installation versuchtbabel
und es hat bei mir nicht funktioniert. Übrigens: Ssube Advice funktioniert.Wenn Sie in Babel Version 7 @ babel / preset-env verwenden, müssen Sie zum Einschließen von Polyfill lediglich ein Flag 'useBuiltIns' mit dem Wert 'usage' in Ihre Babel-Konfiguration einfügen. Es ist nicht erforderlich, Polyfill am Einstiegspunkt Ihrer App zu benötigen oder zu importieren.
Mit diesem Flag wird babel @ 7 optimiert und enthält nur die Polyfills, die Sie benötigen.
So verwenden Sie dieses Flag nach der Installation:
Fügen Sie einfach die Flagge hinzu:
in Ihre Babel-Konfigurationsdatei mit dem Namen "babel.config.js" (ebenfalls neu in Babel @ 7) im Abschnitt "@ babel / env":
Referenz:
Update August 2019:
Mit der Veröffentlichung von Babel 7.4.0 (19. März 2019) ist @ babel / polyfill veraltet. Anstatt @ babe / polyfill zu installieren, installieren Sie core-js:
Ein neuer Eintrag
corejs
wird zu Ihrer babel.config.js hinzugefügtsiehe Beispiel: https://github.com/ApolloTang/stackoverflow-eg--babel-v7.4.0-polyfill-w-core-v3
Referenz:
quelle
useBuiltIns: "usage"
funktioniert nicht auf meiner Seite. Es enthält einfach keine Polydateien im Bundle (Beispiel: Ich verwende Generatoren und erhalte die Fehlermeldung "regeneratorRuntime is not defined"). Irgendwelche Ideen?Wenn Ihre package.json ungefähr so aussieht:
Und Sie erhalten die
Cannot find module 'babel/polyfill'
Fehlermeldung, dann müssen Sie wahrscheinlich nur Ihre Importanweisung ändern FROM:ZU:
Und stellen Sie sicher, dass es vor jeder anderen
import
Aussage steht (nicht unbedingt am Einstiegspunkt Ihrer Bewerbung).Referenz: https://babeljs.io/docs/usage/polyfill/
quelle
Zunächst einmal, die offensichtliche Antwort, die niemand gegeben hat, müssen Sie Babel in Ihre Anwendung installieren:
(oder
babel-core
wenn Sie stattdessen möchtenrequire('babel-core/polyfill')
).Abgesehen davon habe ich eine grunzende Aufgabe, meine es6 und jsx als Build-Schritt zu transpilieren (dh ich möchte sie nicht verwenden
babel/register
, weshalb ich versuche, siebabel/polyfill
direkt zu verwenden ), also würde ich es gerne tun Legen Sie mehr Wert auf diesen Teil der Antwort von @ ssube:Ich bin auf ein seltsames Problem gestoßen, bei dem ich versucht habe, eine
babel/polyfill
Startdatei für eine gemeinsam genutzte Umgebung zu benötigen, und ich habe den Fehler erhalten, auf den der Benutzer verwiesen hat. Ich denke, es hat möglicherweise etwas damit zu tun, wie Babel Importe im Vergleich zu Anforderungen bestellt, aber ich kann sie nicht reproduzieren jetzt. Das Verschiebenimport 'babel/polyfill'
als erste Zeile in meinen Client- und Server-Startskripten hat das Problem behoben.Beachten Sie, dass
require('babel/polyfill')
ich , wenn Sie stattdessen verwenden möchten, sicherstellen würde, dass alle Ihre anderen Modulladeranweisungen ebenfalls erforderlich sind, und keine Importe verwenden - vermeiden Sie das Mischen der beiden. Mit anderen Worten, wenn Sie Importanweisungen in Ihrem Startskript haben, machen Sieimport babel/polyfill
die erste Zeile in Ihrem Skript anstattrequire('babel/polyfill')
.quelle
sudo
mit npm docs.npmjs.com/getting-started/fixing-npm-permissionshttps://www.quora.com/What-does-babel-polyfill-do
https://hackernoon.com/polyfills-everything-you-ever-wanted-to-know-or-maybe-a-bit-less-7c8de164e423
quelle
Wie Babel in den Dokumenten sagt , ist für Babel> 7.4.0 das Modul @ babel / polyfill veraltet , daher wird empfohlen, direkt core-js und regenerator-runtime zu verwenden , die zuvor in @ babel / polyfill enthalten waren.
Das hat also bei mir funktioniert:
Fügen Sie dann ganz oben in Ihrer anfänglichen js-Datei Folgendes hinzu:
quelle