Pracuję w firmie, która ma niestandardową implementację require
. Implementacja pozwala wymagać modułu tylko wtedy, gdy został już pobrany. Jeśli ścieżka kodowa zależy od modułu, ale ścieżka kodowa nie zawsze jest trafiona, moduł nie zawsze jest wymagany. To drastycznie zmniejszyło nasz rozmiar pliku.Sprawdzanie, czy plik został pobrany/wymagany już w pakiecie Web Pack?
Oto przykład, jak może to być przydatne:
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
nie jest załadowany na stronach paszowych i FeedHelper
nie jest załadowany na stronach profilu. Czy Webpack ma coś takiego?
Istnieje potencjalne rozwiązanie tutaj: https://github.com/webpack/webpack/issues/526
Jednak to było z 2 lata temu, a kod wygląda całkiem hacky. Czy istnieje lepszy sposób? Jeśli to nadal jest najlepszy sposób, daj mi znać za pomocą odpowiedzi i zaznaczę ją jako poprawną odpowiedź.
Edycja dla wyjaśnienia:
Gdybym wymagane zarówno ProfileHelper
i FeedHelper
cały czas, a następnie jeden z modułów nie będzie używany. Co najwyżej jedna z nich jest pobierana na dowolnej stronie.
Nie ma to nic wspólnego z dedupcją.
Edit
Spółka generuje wiele różnych pakietów dla różnych stron, ale te zestawy mają wiele plików. Te pliki zachowują się inaczej w zależności od strony, na której się znajdują. Często nie wszystkie moduły odwołują się do pliku dla danej strony. W takim przypadku te pliki po prostu nie są spakowane.
Jeśli pytanie brzmi: czy WebPack de-duplikatów wymaganych modułów? Tak. –
Moje pytanie brzmi: w jaki sposób wymagać czegoś tylko wtedy, gdy jest już pobrane. –
Może to, czego naprawdę potrzebujesz, to dzielenie kodu. https://webpack.github.io/docs/code-splitting.html – Ming