Я работаю в компании, у которой есть обычай require
. Реализация позволяет вам требовать модуль только в том случае, если он уже загружен. Если кодировка зависит от модуля, но код не всегда попадает, модуль не всегда требуется. Это значительно сократило размер нашего файла.Проверить, был ли файл загружен/необходим в Webpack?
Вот пример того, как это может быть полезно:
if (page === PROFILE) {
// ProfileHelper should already be downloaded if we're on the profile page.
if (isRequired('ProfileHelper')) {
const ProfileHelper = require('ProfileHelper');
ProfileHelper.doSomething();
} else {
LogError('ProfileHelper isn\'t loaded on the profile page.');
}
} else if (page === FEED) {
// FeedHelper should already be downloaded if we're on the feed page.
if (isRequired('FeedHelper')) {
const FeedHelper = require('FeedHelper');
FeedHelper.doSomething();
} else {
LogError('FeedHelper isn\'t loaded on the feed page.');
);
}
ProfileHelper
не загружен на корма страниц и FeedHelper
не загружен на страницах профиля. Есть ли у Webpack что-то вроде этого?
Там есть потенциальное решение здесь: https://github.com/webpack/webpack/issues/526
Однако, это было от 2-х лет назад, и код выглядит довольно Hacky. Есть ли способ лучше? Если это по-прежнему лучший способ, дайте мне знать через ответ, и я буду отмечать его как правильный ответ.
Редактировать разъяснения:
Если я требовал как ProfileHelper
и FeedHelper
всего времени, то один из модулей будет использоваться. Не более одного из них загружается на любую страницу.
Это не имеет ничего общего с дедупликацией.
Редактировать
Компания производит множество различных пучков для разных страниц, но эти пакеты имеют много файлов. Эти файлы ведут себя по-разному на основе страницы, на которой они находятся. Часто не для всех модулей ссылки на файлы будут использоваться для данной страницы. В этом случае эти файлы просто не связаны.
Если ваш вопрос: Есть ли WebPack де-дубликатов необходимых модулей? Да. –
Мой вопрос: как мне что-то требовать, только если он уже загружен. –
Возможно, вам действительно нужно разбить код. https://webpack.github.io/docs/code-splitting.html – Ming