Производственная сборка Vue CLI 3 / Webpack не работает на старых браузерах: как добавить поддержку браузера? - PullRequest
0 голосов
/ 25 декабря 2018

Как Vue CLI 3 / Webpack поддерживает старые браузеры?В основном мое приложение Vue прекрасно работает на iPhone 7/8 и рабочем столе Chrome (последняя версия).Но при тестировании на iPad 2 (iOS 9.?) Он просто отображает фон из файла css и все - только пустой экран.Это произошло в двух совершенно разных веб-приложениях, которые я сделал до сих пор, поэтому я не думаю, что это ошибка кодирования.Я думаю, что мне нужно что-то добавить в файл vue.config.js для поддержки старых браузеров?Я не вижу в этом проблемы css, потому что я не использую grid или что-то современное - просто базовый css, который в любом случае автоматически префиксируется.Пожалуйста, прокомментируйте ЛЮБЫЕ идеи относительно того, почему это не работает!Спасибо

1 Ответ

0 голосов
/ 04 января 2019

TL; DR:

По сути, моя проблема заключалась в том, что я не включил Babel в мой шаг сборки Vue CLI 3 (package.json). Приведенные ниже инструкции предназначены специальнона пути к использованию Vue CLI 3. Babel работает со всем Javascript, но в моем случае это связано с проектом Vue CLI 3.

1) Для меня сработало добавление строки:
"@vue/cli-plugin-babel": "^3.2.0",
в мой файл package.json в "devDependencies":

2) Создание файла babel.config.js в корневой папке, содержащего:

module.exports = {
  presets: [
    '@vue/app'
  ]
}

3) Добавление конфигурации browserslist.Это может быть автономный файл .browserslistrc или browserslist, или в моем случае я добавил ключ "browserslist": в свой файл package.json - вот так:

"browserslist": [
  "defaults"
]

Я использовал "defaults" в моем конкретном случае, который в основном сокращен для:
"> 0.5%, last 2 versions, Firefox ESR, not dead"
Но это значение можно настроить в соответствии с тем, какие браузеры вам необходимо поддерживать.Более подробную информацию о настройке browserslist можно найти на этом сайте и на этой странице GitHub .

После того, как я выполнил эти 3 шага, у меня было полностью работающее веб-приложение Vue, работающее на старом iPad 2 под управлением iOS 9 и, по сути, отвечающее на мой первоначальный вопрос выше.


Расширенный ответ

Я не уверен, почему этот вопрос получил отрицательные отзывы, поскольку это распространенная проблема, которая сбивает с толку многих новичков в Vue или Webpack, или даже просто старый ванильный Javascript.Проблема заключается в том, что если вы используете синтаксис Javascript ES6 / ES7 / ES8, тогда ваш код не будет работать в старых браузерах без его переноса .

Главное, что следует отметить при использовании Vue CLI 3Создание и сборка проекта заключается в том, что он по умолчанию будет использовать Webpack под капотом для компиляции вашего проекта при запуске команды сборки.Тем не менее, Webpack может быть настроен для создания вашего проекта множеством способов, и один из этих способов может включать использование Babel.В двух словах, Babel - это транспортер кода Javascript, который позволяет вам использовать функции / синтаксис Javascript ES6 / ES7 / ES8, которые старые браузеры не поддерживают (или новые браузеры пока не поддерживают), и он преобразует ваш код в обычный старый.ES5 Javascript код, который будут понятны тем более старым браузерам.

При создании нового проекта с Vue CLI 3 параметры по умолчанию будут включать использование Babel, которое автоматически переносит ваш код на этапе сборки.Но я на самом деле не знал, что такое Babel, и решил, что мне это не нужно, поэтому я вручную настроил свой проект, чтобы он не включал Babel.Это была моя главная ошибка.Без Babel Webpack просто скомпилирует ваш код, не передавая его - т.е. если он написан с использованием синтаксиса ES6 / ES7 / ES8, то так оно и останется. Это то, что по существу вызвало у меня проблему с тем, что мое приложение не работает в старых браузерах .

Однако после долгих чтений я решил свою проблему, используя шаги, описанные в TL;DR выше.Это помогло мне, и теперь у меня есть веб-приложение Vue, написанное с использованием множества функций ES6 / ES7, которое безупречно работает на старом iPad 2 под управлением iOS 9.

Итак, подведем итог:

1) НАИБОЛЕЕ ВАЖНО!- Убедитесь, что Babel включен в файл package.json в devDependencies, если вы используете синтаксис Javascript ES6 / ES7 / ES8 и вам требуется поддержка широкого спектра браузеров, в том числе старых.

2) Vue CLI 3 по умолчанию использует Babel для автоматической трансляции вашего кода Javascript ES6 / ES7 / ES8 в знакомый код ES5, который могут понять старые браузеры.Поэтому, если вы используете какой-либо более новый синтаксис Javascript, то Babel (или другой Javascript-транспортер) просто необходим, если вы хотите поддерживать более старые браузеры.

3) Настройки по умолчанию для Babel с использованием Vue CLI 3 не поддерживают ALL более старые браузеры .Вам необходимо настроить файл .browserslistrc или browserslist в файле package.json, чтобы включить браузеры, которые вам необходимо поддерживать.

4) Если у вас по-прежнему возникают проблемы с тем, что ваш код не работает в старых браузерах, проверьте эту страницу для получения дополнительной информации о совместимости браузера Vue CLI 3.Вам также следует обратить внимание на зависимости, которые вы используете в своем проекте, так как они могут вызывать проблему, и вам может потребоваться включить определенный polyfill , чтобы добавить дополнительную поддержку.

Я надеюсьэто помогает всем, кто сталкивается с той же проблемой, что и я, когда их код не работал в старых браузерах.Пожалуйста, поделитесь любыми мыслями или комментариями ниже, чтобы улучшить этот пост и дополнительно рассказать мне и другим об этой конкретной теме.Спасибо.

...