Ich arbeite bei einer Firma, die eine benutzerdefinierte require
Implementierung hat. Mit der Implementierung können Sie ein Modul nur dann anfordern, wenn es bereits heruntergeladen wurde. Wenn ein Codepath von einem Modul abhängt, aber der Codepath nicht immer getroffen wird, ist das Modul nicht immer erforderlich. Dies hat unsere Dateigröße drastisch reduziert.Prüfen, ob eine Datei bereits in Webpack heruntergeladen/benötigt wurde?
Hier ist ein Beispiel dafür, wie es nützlich sein kann:
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
nicht geladen wird auf Feed-Seiten und FeedHelper
nicht auf Profilseiten geladen. Hat Webpack so etwas?
Es gibt eine mögliche Lösung hier: https://github.com/webpack/webpack/issues/526
Dies war jedoch von 2 Jahren und der Code sieht ziemlich hacky. Gibt es einen besseren Weg? Wenn das immer noch der beste Weg ist, lassen Sie es mich durch eine Antwort wissen und ich werde es als die richtige Antwort markieren.
Bearbeiten zur Klarstellung:
Wenn ich benötigt sowohl ProfileHelper
und FeedHelper
die ganze Zeit, dann eines der Module wird ungenutzt. Höchstens einer von ihnen wird auf jeder gegebenen Seite heruntergeladen.
Das hat nichts mit Deduplizierung zu tun.
bearbeiten
Das Unternehmen erzeugt viele verschiedene Pakete für verschiedene Seiten, aber diese Bündel viele Dateien gemeinsam nutzen. Diese Dateien verhalten sich je nach der Seite, auf der sie sich befinden, unterschiedlich. Oft werden nicht alle Module eine Dateiverweise für eine bestimmte Seite verwendet. In diesem Fall sind diese Dateien einfach nicht gebündelt.
Wenn Sie die Frage ist: Ist webpack de-Duplikat erforderlichen Module? Ja. –
Meine Frage ist, wie fordere ich etwas nur, wenn es bereits heruntergeladen wurde. –
Vielleicht, was Sie wirklich brauchen, ist Code-Splitting. https://webpack.github.io/docs/code-splitting.html – Ming