Существует такая проблема на IOS 10, из-за которой, вылезает ошибка SyntaxError: Cannot declare a let variable twice: 'e'
. Связано это с ошибочным объявлением ошибки в ситуациях когда переменная обявляется с таким же именем как и переменная в параметре цикла. Например,
let e = e => {
console.log(e);
for (let e of [1, 2, 3])
console.log(e);
};
С точки зрения ES6 здесь все хорошо, но в IOS 10 будет ошибка. Подробнее тут - https://bugs.webkit.org/show_bug.cgi?id=171041.
Из-за этого может возникать много проблем, например, при использовании слайдера Swiper JS и Babel для Webpack. Минифицируя код Swiper JS, получаются именно такие конструкции, на которые ругается IOS 10.
Решение
Плагин - terser-webpack-plugin
. Ссылка на документацию https://webpack.js.org/plugins/terser-webpack-plugin/
Это форк от ранееизвестного uglify-webpack-plugin
, который на данный момент не поддерживается. В Webpack 5 и выше terser-webpack-plugin
идет из коробки и достаточно просто добавить его в конфиг webpack'а webpack.prod.conf.js
.
//Подключаем Terser
const TerserPlugin = require("terser-webpack-plugin");
//Используем при минификации
module.exports = {
...
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
safari10: true,
},
}),
],
},
...
}
В Webpack 4 его нужно установить:
npm install terser-webpack-plugin --save-dev