Разрешение модулей
Разрешитель — это библиотека, которая помогает найти модуль по его абсолютному пути. Модуль может быть запрошен как зависимость от другого модуля следующим образом:
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.
После разрешения пути по вышеуказанному правилу, разрешитель проверяет, указывает ли путь на файл или каталог. Если путь указывает на файл:
- Если у пути есть расширение файла, то файл сразу включается в сборку.
- В противном случае расширение файла разрешается с помощью опции
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://v4.webpack.js.org/concepts/module-resolution