Closed enguerran closed 6 years ago
If we do this, and cozy-client-js is included in an app that doesn't provide babel-polyfill
, what happens?
Then they will be no polyfill, so we will see an error Toto is not defined
when Toto
is something that need to be polyfilled.
As we use babel-preset-env
in .babelrc, polyfills will be included automatically though.
@ptbrowne be ware / attention ⚠️
babel-preset-env
ne polyfill pas. Il réécrit simplement les nouvelles syntaxes vers les anciennes syntaxe const name = 'John Doe'
devient var name = 'John Doe'
(exemple) mais ça peut être plus complet comme réécrire les class
avec les prototype
(exemple)babel-polyfill
ajoute des fonctions, class et autres au contexte de l'environnement d'exécution pour pallier les manques des anciens environnements. Exemple Promise
qui peut être polyfillé avec bluebird
ou avec babel-polyfill
(comme tu peux le voir dans cet exemple, babel ne réécrit pas Promise
car ce n'est pas une question de syntaxe. Si tu exécutes ce code sur un vieux navigateur (IE11, firefox 26, chrome 31, ça ne fonctionnera pas : essayer ce code jsbin dans browserstack)Cependant, si il n'existe pas de Polyfill lors de l'évaluation du code, une erreur explicite sera affichée dans la console : Promise is undefined
.
Bref, tout ça pour dire que babel-preset-env
ne remplace en rien babel-polyfill
.
@enguerran humm, de ce que je comprends de https://github.com/babel/babel/tree/master/packages/babel-preset-env#usebuiltins, c'est plus compliqué que ça. babel-preset-env
peut (selon les options) faire appel à babel-polyfill
pour forcer l'inclusion de polyfills.
@nono à mon avis, ce que usebuitins
permet c'est de ne pas inclure tous les polyfills manquant pour telle plateforme mais d'ajouter à la demande les imports des polyfills nécessaires, sachant que babel-polyfill
inclut core-js
et donc permet au bundle final d'avoir tout le code nécessaire à l'exécution du JavaScript transpilé et greffé avec les polyfills.
On Firefox ESR 52 and Safari, polyfills were needed. Including multiple times babel-polyfill must throw an exception. In the case of
cozy-drive
it did not, getcan't convert undefined to object
in the console instead.It fixes #221 It is related to https://github.com/cozy/cozy-bar/pull/113