Spec-Zone.ru › webpack 5

Разрешение модулей

Резолвер — это библиотека, которая помогает в поиске модуля по его абсолютному пути. Модуль может быть потребован как зависимость от другого модуля, как:

import foo from 'path/to/module';
// or
require('path/to/module');

Зависимый модуль может быть из кода приложения или сторонней библиотеки. Резолвер помогает webpack найти код модуля, который нужно включить в бандл для каждой такой require/import инструкции. webpack использует enhanced-resolve для разрешения путей к файлам при сборке модулей.

Правила разрешения в webpack

Используя enhanced-resolve, webpack может разрешать три типа путей к файлам:

Абсолютные пути

import '/home/me/file';

import 'C:\\Users\\me\\file';

Поскольку у нас уже есть абсолютный путь к файлу, дальнейшее разрешение не требуется.

Относительные пути

import '../src/file1';
import './file2';

В этом случае, директория исходного файла, где происходит import или require, принимается за контекстную директорию. Относительный путь, указанный в import/require, присоединяется к этому контекстному пути для получения абсолютного пути к модулю.

Пути к модулям

import 'module';
import 'module/lib/file';

Модули ищутся во всех директориях, указанных в resolve.modules. Вы можете заменить исходный путь к модулю альтернативным путем, создав для него псевдоним с помощью опции конфигурации resolve.alias.

  • Если пакет содержит файл package.json, то поля, указанные в resolve.exportsFields опциях конфигурации, просматриваются в порядке следования, и первое из таких полей в package.json определяет доступные экспорты из пакета в соответствии с руководством по экспорту пакетов.

После того, как путь разрешен в соответствии с вышеуказанным правилом, резолвер проверяет, указывает ли путь на файл или директорию. Если путь указывает на файл:

  • Если путь имеет расширение файла, то файл сразу включается в бандл.
  • В противном случае, расширение файла разрешается с помощью опции resolve.extensions, которая сообщает резолверу, какие расширения приемлемы для разрешения, например .js, .jsx.

Если путь указывает на папку, то выполняются следующие шаги для поиска нужного файла с нужным расширением:

  • Если папка содержит файл package.json, то поля, указанные в resolve.mainFields опции конфигурации, просматриваются в порядке следования, и первое из таких полей в package.json определяет путь к файлу.
  • Если нет файла package.json или если resolve.mainFields не возвращают допустимый путь, имена файлов, указанные в resolve.mainFiles опции конфигурации, ищутся последовательно, чтобы проверить, существует ли соответствующее имя файла в импортированной/требуемой директории.
  • Затем расширение файла разрешается аналогичным образом с помощью опции resolve.extensions.

Webpack предоставляет разумные значения по умолчанию для этих опций в зависимости от вашей цели сборки.

Разрешение загрузчиков

Это соответствует тем же правилам, что и указанные для разрешения файлов. Но опцию конфигурации resolveLoader можно использовать для настройки отдельных правил разрешения для загрузчиков.

Кэширование

Каждый доступ к файловой системе кэшируется, чтобы несколько параллельных или последовательных запросов к одному и тому же файлу выполнялись быстрее. В режиме отслеживания из кэша удаляются только изменённые файлы. Если режим отслеживания отключён, кэш очищается перед каждой компиляцией.

См. API разрешения, чтобы узнать больше об указанных выше опциях конфигурации.

© JS Foundation and other contributors
Licensed under the Creative Commons Attribution License 4.0.
https://webpack.js.org/concepts/module-resolution

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API