Я пытался сделать свой простой HTML / JS-сайт обратно совместимым (IE11 и ниже) с помощью Babel и shims / polyfills, но не смог сделать это правильно. Мой текущий сайт использует несколько новых функций, таких как Promise()
, fetch()
, document.querySelectorAll().forEach()
и () => {}
.
Я попытался добавить es6-shim , es5-shim , fetch-polyfill и обещание-polyfill , наверху передачи моего кода из es6 -> es5 через Babel. Независимо от того, когда я загружаю свою веб-страницу с помощью более старого браузера (например, IE 11 или 10), я получаю несколько ошибок. В ошибках говорится, что () => {}
не работает, и что .forEach()
не является функцией, что не имеет смысла, так как я использую прокладки и Вавилон.
Вот заказ моего JS включает в себя:
[... body content ...]
<script src="assets/libs/es5-shim/es5-shim.min.js" type="text/javascript"></script>
<script src="assets/libs/es6-shim/es6-shim.min.js" type="text/javascript"></script>
<script src="assets/libs/promise-polyfill/promise-polyfill.min.js" type="text/javascript"></script>
<script src="assets/libs/fetch-polyfill/fetch.umd.js" type="text/javascript"></script>
[... rest of scripts ..]
И для переноса моего кода es6 в es5 я сделал следующее:
npm install -D babel-cli
npm install -D babel-preset-env
// .babelrc
{
"presets": ["env"]
}
// package.json
...
"scripts": {
"build": "babel src -d build",
},
...
npm run build
Два примера ошибок: «Объект не поддерживает свойство или метод forEach» (querySelectorAll().forEach()
) и «Синтаксическая ошибка» (() => {}
)