предисловие
Чисто машинописный перевод, есть также небольшое количество более тупых переводов, простите меня за эту часть, я не слишком понимаю😂
большое изменение
-
окружающая обстановка
Nodejs 4 больше не поддерживается. Исходный код был обновлен до более высокой версии ecmascript.
-
использовать
- Вы должны выбрать один из двух режимов (
mode
или--mode
): производство или разработка- производство откроет все оптимизации для создания оптимизированного пакета
- разработка Открыть комментарии и подсказки и включить функцию eval devtool
- производство не поддерживает режим прослушивания, разработка имеет более быстрые инкрементные сборки
- ты можешь пройти
optimization.*
способ установить более подробную конфигурацию (создать свой пользовательский режим) -
process.env.NODE_ENV
Переменная была установлена как в режиме производства, так и в режиме разработки (только в коде сборки, а не в конфигурации) - Также есть скрытый
none
режим, отключающий все
- Вы должны выбрать один из двух режимов (
-
грамматика
-
import()
всегда будет возвращать объект с пространством имен. Модули CommonJS будут упакованы в экспорт по умолчанию.- Это может сломать ваш код, если вы используете
import()
способ импортировать ваш код CommonJS.
- Это может сломать ваш код, если вы используете
-
-
настроить
- Вам больше не нужно использовать эти плагины:
-
NoEmitOnErrorsPlugin
->optimization.noEmitOnErrors
(производственный режим включен по умолчанию) -
ModuleConcatenationPlugin
->optimization.concatenateModules
(производственный режим включен по умолчанию) -
NameModulesPlugin
->optimization.nameModules
(режим разработки включен по умолчанию)
-
-
CommonsChunkPlugin
было удалено ->optimization.splitChunks
,optimization.runtimeChunk
- Вам больше не нужно использовать эти плагины:
-
JSON
- webpack теперь может обрабатывать нативный json
- Когда вам нужно преобразовать json в js через загрузчик, вам может понадобиться добавить
type:"javascript/auto"
- Вы также можете использовать JSON напрямую, без использования загрузчика.
- Когда вам нужно преобразовать json в js через загрузчик, вам может понадобиться добавить
- Разрешить импорт JSON через синтаксис ESM
- Удалены неиспользуемые экспорты модулей JSON.
- webpack теперь может обрабатывать нативный json
-
оптимизация
- возобновить
uglifyjs-webpack-plugin
до версии 1- Поддержка ЕС2015
- возобновить
большая функция
-
модуль
-
webpack теперь поддерживает следующие типы модулей:
-
javascript/auto: (тип по умолчанию в webpack 3) модули javascript внутри всех модулей
Поддержка системы: CommonJS, AMD, ESM
-
javascript/esm: модули EcmaScript, все другие типы системных модулей будут недоступны.
-
javascript/dynamic: не будут доступны только модули CommonJS и EcmaScript.
-
json: данные JSON, которые можно получить с помощью require или import
-
webassembly/experimental: модули WebAssembly (в настоящее время все еще экспериментальные)
-
-
javascript/esm
Избегание при работе с ESMjavascript/auto
строже-
Импортированное имя должно существовать в импортированном модуле.
-
Динамические модули (не esm, такие как CommonJS) можно получить только через импорт по умолчанию.
Все другие методы (включая импорт пространства имен) сообщат об ошибке.
-
-
существует
.mjs
Модуль будет использоваться по умолчаниюjavascript/esm
модель -
Модули WebAssembly
- Может импортировать другие модули (JS и WASM)
- Модули, экспортированные из WebAssembly, проходят проверку импорта ESM
- Предупреждение/сообщение об ошибке будет активным, когда вы попытаетесь импортировать несуществующий контент из экспорта WASM.
- Его можно использовать только в асинхронно загруженных чанках, и он не работает должным образом в инициализированных чанках. (большое влияние на производительность страницы).
- пройти через
import()
способ импорта модуля WASM
- пройти через
-
-
оптимизация
-
sideEffects: false
Теперь поддерживается использование в package.json.- внутри package.json
sideEffect
Разрешает выражения glob и массивы выражений glob
- внутри package.json
-
Массивы JSONP использовались вместо функций JSONP -> поддержка тегов асинхронного скрипта, порядок больше не имеет значения.
-
Добавить новые параметры
optimization.splitChunks
Подробности:gist.GitHub.com/so преследует A/1522…
-
сам webpack удаляет устаревший код ветки
- До: Uglify удаляет неиспользуемый код
- Теперь: webpack удаляет неиспользуемый код (тот же случай)
- При обнаружении кода заброшенной ветки, который содержит
import()
Удаление прекратится.
-
-
грамматика
-
import()
Поддержка черных технологических аннотаций:webpackInclude
а такжеwebpackExclude
.Они позволяют отфильтровывать некоторые файлы при импорте с использованием динамических выражений.
-
использовать
System.import()
выдаст предупреждение- ты можешь пройти
Rule.parser.system:true
отключить эти предупреждения - ты можешь пройти
Rule.parser.sustem:false
отключитьSystem.import
- ты можешь пройти
-
-
настроить
- в состоянии пройти
module.rules[].resolve
Настроить метод парсинга. Это будет объединено с глобальной конфигурацией. -
optimization.minimize
был добавлен в конфигурацию с помощью его переключателя для свертывания/сжатия.- Включено по умолчанию в производственном режиме, выключено по умолчанию в режиме разработки
-
optimization.minimizer
В конфигурацию добавлена возможность установки обработчиков сжатия и опций.
- в состоянии пройти
-
использовать
- Некоторые параметры плагина были отключены
- CLI был перенесен на webpack-cli, вам необходимо установить webpack-cli, чтобы использовать CLI
- Плагин ProgressPlugin (--progress) теперь печатает название плагина
- По крайней мере, для плагинов, перешедших на новую систему плагинов.
-
представление
- UglifyJs теперь кэширует и распараллеливает по умолчанию
- Множество улучшений производительности, особенно ускорение инкрементных сборок.
- Улучшение производительности RemoveParentModulesPlugin
-
Stats
Статистика теперь печатает иерархически вложенные модули в конкатенированные модули.
Функция
- настроить
- Тип модуля выбирается автоматически среди расширений mjs, json и wasm. Другие расширения должны пройти
module.rules[].type
в конфигурации. - Неправильно
options.dependencies
Конфигурация выдает ошибку. -
sideEffects
Можно переопределить через module.rules -
output.hashFunction
Теперь может быть настраиваемым обработчиком хэшей- Из соображений производительности вы можете предоставить хеш-функцию, не связанную с криптографией.
- Добавить к
output.globalObject
параметр конфигурации, позволяющий выбирать ссылки на глобальные объекты во время выполнения exitCode.
- Тип модуля выбирается автоматически среди расширений mjs, json и wasm. Другие расширения должны пройти
- Время выполнения
- Неправильная загрузка чанков теперь будет содержать больше информации и два новых свойства.
type
а такжеrequest
- Неправильная загрузка чанков теперь будет содержать больше информации и два новых свойства.
- devtool
- Убран нижний комментарий в исходных картах и eval.
- Добавлено в исходную карту eval
include
test
а такжеexclude
служба поддержки
- представление
- AST веб-пакета может быть правильно передан в загрузчик, чтобы избежать повторного синтаксического анализа
- Модули, которые не используются, больше не будут связаны
- Добавьте подключаемый модуль ProfillingPlugin, который может записывать (Chrome) файлы профиля, содержащие тайминги.
- мигрировать, с
for of
заменятьforEach
- мигрировать, с
Map
а такжеSet
вместо объектов - мигрировать, с
includes
заменятьindexOf
- Замените некоторые строковые методы регулярными выражениями
- Очереди больше не запрашивают одно и то же задание дважды
- Используйте более быстрый хэш md4 для хеширования по умолчанию
- оптимизация
- Сокращайте имена экспортов при использовании более 25 экспортов.
- теги script больше не добавляются
text/javascript
а такжеasync
, так как они являются значениями по умолчанию (сохраните несколько байтов) - Объединенные модули генерируют меньше кода
- Постоянная подмена теперь не требуется
__webpack_require__
и параметры были удалены
- По умолчанию
- webpack теперь будет нажимать
.wasm
,.mjs
,.js
,.json
Поиск файлов в расширенном порядке -
output.pathinfo
Режим разработки теперь включен по умолчанию - В рабочем режиме кеш памяти по умолчанию отключен.
-
entry
Точка по умолчанию./src
-
output.path
Точка по умолчанию./dist
- Если режим не указан, по умолчанию используется производственный режим.
- webpack теперь будет нажимать
- грамматика
- Запрос ресурсов ветви контекста
- существует
import()
Имя узла входа внутри приложения изменится с предупреждения на сообщение об ошибке. - Обновите acorn5 для поддержки ES2018.
- плагин
-
done
теперь асинхронный хук
-
Исправление ошибок
- Создание комментария больше не будет прерываться при обнаружении символа */
- webpack больше не изменяет переданные объекты параметров
- Хук компилятора «watch-run» теперь включает сам компилятор в качестве первого аргумента.
- Добавить к
output.chunkCallbackName
чтобы разрешить настройку шаблонов веб-воркеров - использовать
mdoule.id/loaded
Может корректно выпрыгивать из связывания модулей (продвижение области действия) - OccurenceOrderPlugin теперь правильно упорядочивает модули (а не наоборот)
- при звонке
Watching.invalidate
, временная метка файла получена от слушателя - исправить неправильный загрузчик постов
-!
поведение - существует
MultiCompiler
добавлено вrun
а такжеwatchRun
крюк - в ЕСМ
this
будетundefined
- в состоянии пройти
var
,let
,const
сделать правильное объявление переменной - Парсер теперь использует тип модуля
javascript/dynamic
илиjavascript/module
, проанализируйте исходный код с правильным исходным кодом (модулем/скриптом). - при встрече
buildMeta
Null не ломается при отсутствии модулей - Добавить электронную мишень
original-fs
модуль - HMRPlugin можно найти в
plugins
добавить в компилятор
Внутренние изменения
- использовать
tap
звонок на заменуplugin
Invoke (новая система плагинов) - Многие устаревшие плагины перенесены в новый API системы плагинов.
- Добавить к
buildMeta.exprotsType:default
в json-модуль - Удалить неиспользуемые функции в парсере (parserStringArray, parserCalculatedStringArray)
- удалить очистить
BasicEvaluatedExpression
и имеет возможность иметь несколько типов - Замените новый буфер на Buffur.from
- Избегайте использования forEach вместо использования for of
- использовать
neo-async
заменятьasync
- Обновите эксплуатируемые зависимости и зависимости с расширенным разрешением до новых основных версий.
- Использование красивее
удаленные функции
-
Удалить
module.loaders
-
Удалить
loaderContext.options
-
Удалить
Compliation.notCacheable
отметка -
Удалить
NoErrorsPlugin
-
Удалить
Dependency.isEqualResource
-
Удалить
NewWatchingPlugin
-
Удалить
CommonsChunkPlugin
Критические изменения для плагинов/загрузчиков
- новая система плагинов
-
plugin
Методы обратно совместимы - Плагины должны использовать
Compiler.hooks.xxx.tap(<plugin name>, fn)
-
- Расширенный синтаксический анализ новой основной версии
- Шаблоны для чанков теперь могут генерировать несколько активов
-
Chunk.chunks/parents/blocks
Теперь это не массив. Набор используется внутри, и есть методы для доступа к нему. -
Parser.scope.renames
а такжеParser.scope.definitions
Не Объект/Массив, а Карта/Набор. - Парсер использует
StackedSetMap
(структура массива в форме LevelDB) вместо массива - Больше не устанавливается при применении плагинов
Compiler.options
- Зависимости Harmony изменились из-за рефакторинга
-
Dependency.getReference()
теперь вернетweak
Атрибуты.Dependency.weak
сейчасDependency
Базовый класс использует и вgetReference()
Вернул во внутреннюю базу реализацию - Все параметры конструктора
module
Изменять - сливаться
ContextModule
а такжеresolveDependencies
варианты в - изменить и переименовать
import()
зависимости внутри - мигрировать
Compiler.resolvers
прибытьCompiler.resolverFactory
так что плагин может получить доступ -
Dependency.isEqualResource
одеялоDependency.getResourceIdentifier
заменять -
Template
Метод внутри теперь является статическим методом - Добавьте новый класс RuntimeTemplate,
outputOptions
а такжеrequestShortener
Перейти на этот курс- Многие методы обновлены для использования вместо них RuntimeTemplate.
- Мы планируем переместить код, имеющий доступ к среде выполнения, в новый класс.
-
Module.meta
одеялоModule.buildMeta
заменять - новый
Module.buildInfo
а такжеModule.factoryMeta
-
Module
Некоторые свойства перемещены в новый объект - добавить этот указатель
context
необязательныйloaderContext.rootContext
. Это может понадобиться загрузчикам для создания контента относительно корня программы. - новый
this.hot
Тег для контекста загрузчика, когда HMR включен -
buildMeta.harmony
одеялоbuildMeta.exportType: "namespace"
заменять - Граф чанка изменился:
- До: Чанки связаны отношениями родитель-потомок.
- Теперь: группы фрагментов связаны отношениями родитель-потомок, группы фрагментов содержат фрагменты.
- Раньше: асинхронно зависимые фрагменты относятся к набору фрагментов.
- Теперь: асинхронные зависимости относятся к одной группе фрагментов.
- file/contextTimstamps теперь являются картами
-
map/foreach
Chunks/Modules/Parents
метод был удален - NormalModule получает объект параметров в конструкторе
- Добавьте необходимые параметры сборки в NormalModule
- Добавьте в NormalModuleFactory
createGenerator
а такжеgenerator
Хуки генерируются с помощью пользовательского кода - Манифест, позволяющий настраивать рендеринг чанков с помощью хуков.