Når Webpack samler dine moduler, følger det afhængighedskæden for det modul, du har importeret (eller krævet), og trækker alle dets afhængigheder ind og bundter dem også helt ned til slutningen af kæden.
Hvis der er en fil, som den ikke ved, hvordan den skal indlæses i den afhængighedskæde, vil denne type fejl blive kastet.
Dette kan nogle gange løses ved at tilføje en loader, der ved, hvordan man indlæser denne type afhængighed. Hvis afhængigheden derimod er et ikke-native modul, kan Webpack ikke indlæse det. Nogle af indlæserne ved, hvordan man indlæser moduler med ikke-native afhængigheder ved at udstøde og ekskludere den ikke-native del, så den indlæses. I fs
modul for eksempel behøver du ikke at kunne læse og skrive filer fra disk, fordi browseren ikke kan gøre det, så det er ikke nødvendigt at inkludere den del.
Dette rejser spørgsmålet:Hvilken funktionalitet fra mongoose-modulet har du brug for i browseren? Kan du inkludere netop den funktionalitet og ikke hele mongoose-modulet?
Hvis du er i stand til at gøre dette, kan du muligvis løse 2 problemer:
- Du løser muligvis Webpack-bundtproblemet, fordi den del af mongoose, som du medtager i dit projekt, ikke har problematiske underafhængigheder.
- Du vil oprette en mindre bundt med Webpack, fordi du kun vil inkludere de dele, du har brug for, så bundle.js nyttelasten til klienten bliver meget mindre.
Som et eksempel havde jeg for nylig brug for at bruge mongodb ObjectId-generatoren i klienten. Jeg opdagede, at Webpack ikke var i stand til at klare import mongodb from 'mongodb'
komponent, så ved at grave i afhængighederne fandt jeg den mongodb
afhænger af mongodb-core
hvilket afhænger af bson
som har ObjectId
metode, jeg havde brug for.
Ved kun at importere bson
komponent af den afhængighedskæde kom jeg uden om Webpack-problemet og gjorde mit bundt meget mindre.
Hvis du bruger Npm 3, så er der en god chance for, at bson
er installeret i roden af node_modules
hvis du allerede bruger mongoose eller mongodb, så du kan import
det uden at sætte en eksplicit reference til det i din package.json
. Dette indebærer naturligvis risikoen for, at hvis den øvre afhængighed stopper afhængigt af det, vil din build bryde, og du bliver nødt til at npm install
det selvstændigt. Fordelen ved at bruge denne tilgang er, at du altid vil bruge den samme version af bson
som den øvre afhængighed bruger, hvilket kan være vigtigt.