Каково ожидаемое поведение для относительного `newResource` в` NormalModuleReplacePlugin` веб-пакета? - PullRequest
0 голосов
/ 03 июня 2018

В документации для веб-пакета NormalModuleReplacementPlugin указано:

Если newResource относительно, оно разрешается относительно предыдущего ресурса.

Пример в документации:

new webpack.NormalModuleReplacementPlugin(
  /some\/path\/config\.development\.js/,
  './config.production.js'
);

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

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

Вот ссылка на хранилище, чтобы показать ошибку.

1 Ответ

0 голосов
/ 03 июня 2018

'предыдущий ресурс' - это импорт, соответствующий регулярному выражению

да, связанный код: здесь

Я создал демонстрационный проектhttps://github.com/loveky/webpack-NormalModuleReplacementPlugin-demo Вы можете скачать и попробовать

Вот точка останова с использованием демонстрационного проекта.

enter image description here


обновление на основе сломанного репо

, если вы измените строку в src/a/b/c/import3.js с:

import { something } from '../../e/initial.js';

на

import { something } from '../../e/initial';

, то выдолжна быть в состоянии скомпилировать без ошибок.

Почему:

Если вы импортируете ../../e/initial.js, то в хуке beforeResolve result.request имеет формат:

"../../e/initial.js"

, который соответствует вашему регулярному выражению /\/e\/initial\.js$/, а затем плагин обновляет запрос и вызывает ошибку Module not found.

при импорте ../../e/initial, который не соответствует /\/e\/initial\.js$/, так как отсутствует расширение .js, и это переходит к afterResolve ловушке, где путь заменяется правильно.

Так что, чтобы это работало, мы должны опустить расширение файлав нашем импортет.Это не задокументировано в документации по плагинам.Возможно, вы можете отправить вопрос на GitHub, чтобы попросить у автора пояснений.

Редактировать:

Если вы работаете в Windows, то разделитель пути будет \,поэтому, чтобы создать регулярное выражение, работающее на всех платформах, вы можете использовать path.sep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...