предисловие
Чисто машинописный перевод, есть также небольшое количество более тупых переводов, простите меня за эту часть, я не слишком понимаю😂
большое изменение
-
окружающая обстановка
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
includetestа также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, проанализируйте исходный код с правильным исходным кодом (модулем/скриптом). - при встрече
buildMetaNull не ломается при отсутствии модулей - Добавить электронную мишень
original-fsмодуль - HMRPlugin можно найти в
pluginsдобавить в компилятор
Внутренние изменения
- использовать
tapзвонок на заменуpluginInvoke (новая система плагинов) - Многие устаревшие плагины перенесены в новый 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/foreachChunks/Modules/Parentsметод был удален - NormalModule получает объект параметров в конструкторе
- Добавьте необходимые параметры сборки в NormalModule
- Добавьте в NormalModuleFactory
createGeneratorа такжеgeneratorХуки генерируются с помощью пользовательского кода - Манифест, позволяющий настраивать рендеринг чанков с помощью хуков.