Kiedy Webpack pakuje twoje moduły, podąża za łańcuchem zależności modułu, który zaimportowałeś (lub wymagany) i ściąga wszystkie jego zależności, a także pakuje je aż do końca łańcucha.
Jeśli istnieje plik, którego nie potrafi załadować w tym łańcuchu zależności, zostanie zgłoszony ten rodzaj błędu.
Czasami można to rozwiązać, dodając program ładujący, który wie, jak załadować tego typu zależność. Jeśli jednak zależność jest modułem innym niż natywny, Webpack nie może go załadować. Niektóre programy ładujące wiedzą, jak załadować moduły z zależnościami innymi od natywnych, wyłączając i wyłączając część nienatywną, aby mogła się załadować. W fs
na przykład nie musisz mieć możliwości odczytywania i zapisywania plików z dysku, ponieważ przeglądarka nie może tego zrobić, więc nie ma potrzeby dołączania tej części.
Rodzi to pytanie:jakiej funkcjonalności z modułu mangoose potrzebujesz w przeglądarce? Czy możesz uwzględnić tylko tę funkcję, a nie cały moduł mangusty?
Jeśli jesteś w stanie to zrobić, możesz rozwiązać 2 problemy:
- Możesz rozwiązać problem pakowania Webpack, ponieważ część mangusty, którą włączasz do swojego projektu, nie ma problematycznych zależności podrzędnych.
- Będziesz tworzyć mniejszy pakiet za pomocą Webpack, ponieważ będziesz uwzględniał tylko te części, których potrzebujesz, więc ładunek bundle.js do klienta będzie znacznie mniejszy.
Jako przykład ostatnio musiałem użyć generatora mongodb ObjectId w kliencie. Odkryłem, że Webpack nie był w stanie poradzić sobie z import mongodb from 'mongodb'
komponent, więc zagłębiając się w zależności, odkryłem, że mongodb
zależy od mongodb-core
co zależy od bson
który ma ObjectId
metoda, której potrzebowałem.
Importując tylko bson
składnik tego łańcucha zależności Obszedłem problem z pakietem Webpack i znacznie zmniejszyłem swój pakiet.
Jeśli używasz Npm 3, jest duża szansa, że bson
jest zainstalowany w katalogu głównym node_modules
jeśli już używasz mangoose lub mongodb, więc możesz import
go bez umieszczania wyraźnego odniesienia do niego w swoim package.json
. To oczywiście niesie ze sobą ryzyko, że jeśli górna zależność przestanie zależeć od niej, twoja kompilacja się zepsuje i będziesz musiał npm install
to niezależnie. Zaletą takiego podejścia jest to, że zawsze będziesz używać tej samej wersji bson
że używa górnej zależności, co może być ważne.