Saya baru saja mulai menggunakan Babel untuk mengkompilasi kode javascript ES6 saya ke ES5. Saat saya mulai menggunakan Promises, sepertinya tidak berfungsi. Situs web Babel menyatakan dukungan untuk promise melalui polyfill.
Tanpa hasil, saya mencoba menambahkan:
require("babel/polyfill");
atau
import * as p from "babel/polyfill";
Dengan itu saya akan mendapatkan kesalahan berikut pada bootstrap aplikasi saya:
Tidak dapat menemukan modul 'babel / polyfill'
Saya mencari modulnya tetapi sepertinya saya kehilangan beberapa hal mendasar di sini. Saya juga mencoba menambahkan NPM bluebird yang lama dan bagus tetapi sepertinya tidak berfungsi.
Bagaimana cara menggunakan polyfill dari Babel?
npm install _name_
npm install --save babel-polyfill
danrequire('babel-polyfill)
.Jawaban:
Ini sedikit berubah di babel v6.
Dari dokumen:
Instalasi:
$ npm install babel-polyfill
Penggunaan di Node / Browserify / Webpack:
Untuk menyertakan polyfill, Anda harus memerlukannya di bagian atas titik masuk ke aplikasi Anda.
require("babel-polyfill");
Penggunaan di Browser:
Tersedia dari
dist/polyfill.js
file dalambabel-polyfill
rilis npm. Ini harus disertakan sebelum semua kode Babel Anda yang dikompilasi. Anda dapat menambahkannya ke kode yang telah dikompilasi atau memasukkannya ke dalam<script>
sebelumnya.CATATAN: Jangan lakukan
require
ini melalui browserify dll, gunakanbabel-polyfill
.sumber
Array.protorype.findIndex()
tidak bekerja tanpa polyfill dan babel tidak akan memunculkan pengecualian saat transpiling? Apakah itu sifat dari Polyfill ™?Dokumen Babel menjelaskan ini dengan cukup singkat:
Pastikan Anda memerlukannya di pintu masuk ke aplikasi Anda, sebelum hal lain dipanggil. Jika Anda menggunakan alat seperti webpack, itu menjadi sangat sederhana (Anda dapat memberi tahu webpack untuk menyertakannya dalam bundel).
Jika Anda menggunakan alat seperti
gulp-babel
ataubabel-loader
, Anda juga perlu menginstalbabel
paket itu sendiri untuk menggunakan polyfill.Perhatikan juga bahwa untuk modul yang memengaruhi cakupan global (polyfill dan sejenisnya), Anda dapat menggunakan impor singkat untuk menghindari variabel yang tidak digunakan dalam modul Anda:
import 'babel/polyfill';
sumber
import 'babel-core/polyfill'
tanpa menginstalbabel
dan berhasil dengan baik.import 'babel-core/polifyll'
berhasil. Saya mencobanya tanpa menginstalbabel
dan tidak berhasil untuk saya. By the way: saran ssube bekerja.Untuk Babel versi 7, jika Anda menggunakan @ babel / preset-env, untuk menyertakan polyfill yang harus Anda lakukan adalah menambahkan tanda 'useBuiltIns' dengan nilai 'usage' dalam konfigurasi babel Anda. Tidak perlu memerlukan atau mengimpor polyfill di titik masuk Aplikasi Anda.
Dengan menetapkan tanda ini, babel @ 7 akan mengoptimalkan dan hanya menyertakan polyfill yang Anda butuhkan.
Untuk menggunakan tanda ini, setelah instalasi:
Cukup tambahkan bendera:
useBuiltIns: "usage"
ke file konfigurasi babel Anda yang bernama "babel.config.js" (juga baru di Babel @ 7), di bawah bagian "@ babel / env":
// file: babel.config.js module.exports = () => { const presets = [ [ "@babel/env", { targets: { /* your targeted browser */ }, useBuiltIns: "usage" // <-----------------*** add this } ] ]; return { presets }; };
Referensi:
Perbarui Agt 2019:
Dengan dirilisnya Babel 7.4.0 (19 Maret 2019) @ babel / polyfill tidak digunakan lagi. Alih-alih memasang @ babe / polyfill, Anda akan memasang core-js:
npm install --save core-js@3
Entri baru
corejs
ditambahkan ke babel.config.js Anda// file: babel.config.js module.exports = () => { const presets = [ [ "@babel/env", { targets: { /* your targeted browser */ }, useBuiltIns: "usage", corejs: 3 // <----- specify version of corejs used } ] ]; return { presets }; };
lihat contoh: https://github.com/ApolloTang/stackoverflow-eg--babel-v7.4.0-polyfill-w-core-v3
Referensi:
sumber
useBuiltIns: "usage"
tidak bekerja di sisi saya. Ini hanya tidak menyertakan polyfil dalam bundel (contoh: Saya menggunakan generator dan mendapatkan kesalahan "regeneratorRuntime tidak ditentukan"). Ada ide?Jika package.json Anda terlihat seperti berikut ini:
... "devDependencies": { "babel": "^6.5.2", "babel-eslint": "^6.0.4", "babel-polyfill": "^6.8.0", "babel-preset-es2015": "^6.6.0", "babelify": "^7.3.0", ...
Dan Anda mendapatkan
Cannot find module 'babel/polyfill'
pesan kesalahan, maka Anda mungkin hanya perlu mengubah pernyataan impor Anda DARI:import "babel/polyfill";
UNTUK:
import "babel-polyfill";
Dan pastikan itu datang sebelum
import
pernyataan lain (tidak harus di titik masuk aplikasi Anda).Referensi: https://babeljs.io/docs/usage/polyfill/
sumber
Pertama, jawaban jelas yang belum disediakan oleh siapa pun, Anda perlu menginstal Babel ke dalam aplikasi Anda:
(atau
babel-core
jika Anda malah inginrequire('babel-core/polyfill')
).Selain itu, saya memiliki tugas kasar untuk mentranspilasi es6 dan jsx saya sebagai langkah pembuatan (yaitu saya tidak ingin menggunakan
babel/register
, itulah sebabnya saya mencoba menggunakanbabel/polyfill
secara langsung), jadi saya ingin melakukannya lebih menekankan pada bagian jawaban @ ssube ini:Saya mengalami beberapa masalah aneh di mana saya mencoba meminta
babel/polyfill
dari beberapa file startup lingkungan bersama dan saya mendapatkan kesalahan yang dirujuk pengguna - Saya pikir itu mungkin ada hubungannya dengan bagaimana babel memesan impor versus kebutuhan tetapi saya tidak dapat mereproduksi sekarang. Bagaimanapun, memindahkanimport 'babel/polyfill'
sebagai baris pertama di skrip startup klien dan server saya memperbaiki masalah.Perhatikan bahwa jika Anda ingin menggunakan
require('babel/polyfill')
saya akan memastikan semua pernyataan pemuat modul Anda yang lain juga memerlukan dan tidak menggunakan impor - hindari mencampur keduanya. Dengan kata lain, jika Anda memiliki pernyataan import di skrip startup, buatlahimport babel/polyfill
baris pertama di skrip Anda, bukanrequire('babel/polyfill')
.sumber
sudo
dengan 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
sumber
Seperti yang dikatakan Babel di dokumen , untuk Babel> 7.4.0 modul @ babel / polyfill tidak digunakan lagi , jadi disarankan untuk menggunakan langsung pustaka core-js dan regenerator-runtime yang sebelumnya disertakan dalam @ babel / polyfill.
Jadi ini berhasil untuk saya:
npm install --save core-js@3.6.5 npm install regenerator-runtime
lalu tambahkan ke bagian paling atas file js awal Anda:
import 'core-js/stable'; import 'regenerator-runtime/runtime';
sumber