Wenn Webpack Ihre Module bündelt, folgt es der Abhängigkeitskette des Moduls, das Sie importiert (oder benötigt) haben, zieht alle seine Abhängigkeiten ein und bündelt sie auch bis zum Ende der Kette.
Wenn in dieser Abhängigkeitskette eine Datei nicht geladen werden kann, wird dieser Fehlertyp ausgegeben.
Dies kann manchmal gelöst werden, indem ein Ladeprogramm hinzugefügt wird, das weiß, wie diese Art von Abhängigkeit geladen wird. Wenn die Abhängigkeit jedoch ein nicht natives Modul ist, kann Webpack es nicht laden. Einige der Lader wissen, wie man Module mit nicht-nativen Abhängigkeiten lädt, indem sie den nicht-nativen Teil ausschließen und ausschließen, damit er geladen wird. Im fs
Modul zum Beispiel müssen Sie nicht in der Lage sein, Dateien von der Festplatte zu lesen und zu schreiben, da der Browser dies nicht kann, also müssen Sie diesen Teil nicht einschließen.
Dies wirft die Frage auf:Welche Funktionalität aus dem Mongoose-Modul benötigen Sie im Browser? Können Sie nur diese Funktionalität und nicht das gesamte Mongoose-Modul einbinden?
Wenn Sie dazu in der Lage sind, können Sie möglicherweise 2 Probleme lösen:
- Sie könnten das Webpack-Bündelungsproblem lösen, da der Teil von Mongoose, den Sie in Ihr Projekt einschließen, keine problematischen Unterabhängigkeiten aufweist.
- Sie werden mit Webpack ein kleineres Bundle erstellen, da Sie nur die Teile einschließen, die Sie benötigen, sodass die Bundle.js-Nutzlast für den Client viel kleiner ist.
Als Beispiel musste ich kürzlich den mongodb ObjectId-Generator im Client verwenden. Ich habe festgestellt, dass Webpack mit dem import mongodb from 'mongodb'
nicht zurechtkommt Komponente, so dass ich in den Abhängigkeiten gegraben habe, dass ich mongodb
gefunden habe hängt von mongodb-core
ab was von bson
abhängt die die ObjectId
hat Methode, die ich brauchte.
Indem Sie nur den bson
importieren Komponente dieser Abhängigkeitskette habe ich das Webpack-Problem umgangen und mein Bündel viel kleiner gemacht.
Wenn Sie Npm 3 verwenden, besteht eine gute Chance, dass bson
wird im Stammverzeichnis von node_modules
installiert wenn Sie bereits Mongoose oder Mongodb verwenden, können Sie import
ohne einen expliziten Verweis darauf in Ihre package.json
einzufügen . Dies birgt offensichtlich das Risiko, dass, wenn die obere Abhängigkeit nicht mehr davon abhängt, Ihr Build kaputt geht und Sie npm install
müssen es selbstständig. Der Vorteil dieses Ansatzes besteht darin, dass Sie immer dieselbe Version von bson
verwenden dass die obere Abhängigkeit verwendet, was wichtig sein könnte.