const и let не работает в Safari 9.x . Вопрос транспилятора?
Приложение, над которым я работаю, имеет проблемы с запуском в Safari (оно отлично работает везде). Там он не загружает мой файл bundle.js и выдает сообщение об ошибке "неожиданное использование зарезервированного слова" let "в строгом режиме.
Из нескольких других вопросов я видел, что это, скорее всего, связано с проблемой транспортера - но я не эксперт в Webpack или Babel и не знаю, с чего начать, чтобы это исправить.
Вот мой конфигурационный (общий) файл webpack:
const path = require('path');
const webpack = require('webpack');
module.exports = {
entry: ['babel-polyfill', path.join(__dirname, `/src/main.js`)],
output: {
path: path.join(__dirname, `/public`),
filename: `bundle.js`
},
module: {
rules: [
{
test: /\.js$/,
exclude: [
path.join(__dirname, '/node_modules'),
],
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: [
['transform-class-properties', { 'spec': true }],
['transform-object-rest-spread']
]
}
}
}, {
test: /\.s?css$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' },
{ loader: 'sass-loader' }
]
}
]
}
};
и вот мой package.json:
{
"name": "last-minute",
"version": "1.0.0",
"description": "connect to others nearby for last-minute hanging out",
"main": "webpack.prod.js",
"engines": {
"node": "9.5.0",
"npm": "6.1.0"
},
"scripts": {
"test": "jest --config jest.config.json",
"start": "node server/server.js",
"build": "webpack --config webpack.prod.js",
"dev": "webpack --config webpack.dev.js --mode development && node server/server.js",
"light": "webpack --config webpack.light.js --mode development && node light-server/style-server.js"
},
"author": "Doug Sauve",
"license": "ISC",
"dependencies": {
"@babel/core": "^7.0.0-beta.44",
"@babel/preset-env": "^7.0.0-beta.44",
"@babel/preset-react": "^7.0.0-beta.44",
"@google/maps": "^0.4.6",
"babel-loader": "^8.0.0-beta.2",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.7.0",
"bcryptjs": "^2.4.3",
"css-loader": "^0.28.11",
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.1",
"express": "^4.16.2",
"google-maps-react": "^2.0.2",
"jest": "^22.4.4",
"moment": "^2.22.1",
"mongoose": "^5.0.14",
"node-sass": "^4.9.2",
"nodemailer": "^4.6.5",
"normalize.css": "^8.0.0",
"raf": "^3.4.0",
"react": "^16.3.1",
"react-dom": "^16.3.1",
"react-geocode": "0.0.9",
"react-redux": "^5.0.7",
"react-test-renderer": "^16.0.0",
"redux": "^4.0.0",
"sass-loader": "^6.0.7",
"socket.io": "^2.1.0",
"style-loader": "^0.20.3",
"validator": "^10.2.0",
"webpack": "^4.4.1",
"webpack-cli": "^2.0.13",
"webpack-merge": "^4.1.2"
}
}
Я был бы очень рад, если бы кто-то мог помочь!!
1 ответ
ES6 'let' не поддерживается Safari 9. Can I Use - довольно хороший ресурс для проверки совместимости браузера.
Непроверенная возможность: я буду тестировать это позже, но если вы еще не решили это, проверьте свой файл.babelrc
Сегодня я пытался решить проблему совместимости с полифилом, и это может быть связано с тем, что я неправильно сконфигурировал свою предустановленную среду для более старых версий iOS. На этой странице в Babel показано, как настроить предустановки для Safari версии 7 или выше.
https://babeljs.io/docs/en/6.26.3/babel-preset-env
Я попробую это завтра, немного поспав.