Comecei a usar o Babel para compilar meu código javascript ES6 no ES5. Quando começo a usar o Promises, parece que não está funcionando. O site da Babel declara suporte a promessas via polyfills.
Sem sorte, tentei acrescentar:
require("babel/polyfill");
ou
import * as p from "babel/polyfill";
Com isso, receberei o seguinte erro no bootstrap do aplicativo:
Não foi possível encontrar o módulo 'babel / polyfill'
Eu procurei pelo módulo, mas parece que estou perdendo alguma coisa fundamental aqui. Também tentei adicionar o NPM bluebird antigo e bom, mas parece que ele não está funcionando.
Como usar os polyfills da Babel?
npm install _name_
npm install --save babel-polyfill
erequire('babel-polyfill)
.Respostas:
Isso mudou um pouco no babel v6.
Dos documentos:
Instalação:
$ npm install babel-polyfill
Uso no Node / Browserify / Webpack:
Para incluir o polyfill, você precisa solicitá-lo na parte superior do ponto de entrada do seu aplicativo.
require("babel-polyfill");
Uso no navegador:
disponível no
dist/polyfill.js
arquivo em umbabel-polyfill
release npm. Isso precisa ser incluído antes de todo o seu código Babel compilado. Você pode anexá-lo ao seu código compilado ou incluí-lo em um<script>
antes dele.NOTA: Não faça
require
isso via browserify etc, usebabel-polyfill
.fonte
Array.protorype.findIndex()
não funcionam sem o polyfill e o babel não gera uma exceção quando está transpilando? Essa é a natureza de um Polyfill ™?Os documentos de Babel descrevem isso de forma bastante concisa:
Certifique-se de solicitá-lo no ponto de entrada do seu aplicativo antes que qualquer outra coisa seja chamada. Se você estiver usando uma ferramenta como o webpack, isso se torna bastante simples (você pode dizer ao webpack para incluí-lo no pacote).
Se você estiver usando uma ferramenta como
gulp-babel
oubabel-loader
, também precisará instalar obabel
próprio pacote para usar o polyfill.Observe também que, para os módulos que afetam o escopo global (polyfills e similares), você pode usar uma importação concisa para evitar ter variáveis não utilizadas em seu módulo:
fonte
import 'babel-core/polyfill'
sem instalarbabel
e funcionou muito bem.import 'babel-core/polifyll'
funciona. Eu tentei sem instalarbabel
e não funcionou para mim. By the way: ssube aconselhar funciona.Para o Babel versão 7, se você estiver usando @ babel / preset-env, para incluir o polyfill, basta adicionar um sinalizador 'useBuiltIns' com o valor de 'use' na sua configuração do babel. Não há necessidade de solicitar ou importar o polyfill no ponto de entrada do seu aplicativo.
Com esse sinalizador especificado, o babel @ 7 otimizará e incluirá apenas os polyfills necessários.
Para usar esse sinalizador, após a instalação:
Basta adicionar a bandeira:
ao seu arquivo de configuração babel chamado "babel.config.js" (também novo no Babel @ 7), na seção "@ babel / env":
Referência:
Atualizar agosto de 2019:
Com o lançamento do Babel 7.4.0 (19 de março de 2019), o babel / polyfill foi descontinuado. Em vez de instalar o @ babe / polyfill, você instalará o core-js:
Uma nova entrada
corejs
é adicionada ao seu babel.config.jsveja o exemplo: https://github.com/ApolloTang/stackoverflow-eg--babel-v7.4.0-polyfill-w-core-v3
Referência:
fonte
useBuiltIns: "usage"
não funciona do meu lado. Ele simplesmente não inclui nenhum polyfils no pacote (exemplo: eu uso geradores e recebo um erro "regeneratorRuntime não está definido"). Alguma ideia?Se o seu package.json se parecer com o seguinte:
E você recebe a
Cannot find module 'babel/polyfill'
mensagem de erro, provavelmente precisará alterar sua instrução de importação DE:PARA:
E verifique se ele vem antes de qualquer outra
import
declaração (não necessariamente no ponto de entrada do seu aplicativo).Referência: https://babeljs.io/docs/usage/polyfill/
fonte
Primeiro, a resposta óbvia que ninguém forneceu, você precisa instalar o Babel no seu aplicativo:
(ou
babel-core
se você preferirrequire('babel-core/polyfill')
).Além disso, tenho uma tarefa difícil de transpilar meu es6 e jsx como uma etapa de compilação (ou seja, eu não quero usar
babel/register
, e é por isso que estou tentando usarbabel/polyfill
diretamente em primeiro lugar), então gostaria de coloque mais ênfase nesta parte da resposta da @ ssube:Encontrei um problema estranho em que estava tentando solicitar
babel/polyfill
algum arquivo de inicialização do ambiente compartilhado e recebi o erro que o usuário referenciou - acho que pode ter algo a ver com a forma como o babel ordena a importação versus requer, mas não consigo reproduzir agora. De qualquer forma, moverimport 'babel/polyfill'
como a primeira linha nos scripts de inicialização do meu cliente e servidor corrigiu o problema.Observe que, se você preferir usar
require('babel/polyfill')
, garantiria que todas as outras instruções do carregador de módulos também sejam necessárias e não usem importações - evite misturar as duas. Em outras palavras, se você tiver alguma declaração de importação no script de inicialização, façaimport babel/polyfill
a primeira linha do script em vez derequire('babel/polyfill')
.fonte
sudo
com o 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-bitbitless-7c8de164e423
fonte
Como Babel diz nos documentos , para Babel> 7.4.0 o módulo @ babel / polyfill está obsoleto , por isso é recomendável usar diretamente as bibliotecas core-js e regenerator-runtime que antes eram incluídas no @ babel / polyfill.
Então, isso funcionou para mim:
adicione no topo do seu arquivo js inicial:
fonte