Когато Webpack обединява вашите модули, той следва веригата на зависимостите на модула, който сте импортирали (или сте изисквали), и извлича всички негови зависимости, а също така ги обединява до края на веригата.
Ако има файл, който не знае как да зареди в тази верига на зависимости, тогава ще бъде изведен този тип грешка.
Това понякога може да бъде решено чрез добавяне на товарач, който знае как да зарежда този тип зависимости. Ако обаче зависимостта е нероден модул, тогава Webpack не може да го зареди. Някои от програмите за зареждане знаят как да зареждат модули с чужди зависимости, като премахват и изключват чуждата част, така че да се зареди. В fs
модул, например, не е нужно да можете да четете и записвате файлове от диск, защото браузърът не може да прави това, така че няма нужда да включвате тази част.
Това повдига въпроса:Каква функционалност от модула mongoose ви трябва в браузъра? Можете ли да включите само тази функционалност, а не целия модул mongoose?
Ако можете да направите това, тогава може да успеете да разрешите 2 проблема:
- Може да разрешите проблема с групирането на Webpack, защото частта от mongoose, която включвате в проекта си, няма проблемни подзависимости.
- Ще създадете по-малък пакет с Webpack, защото ще включите само частите, от които се нуждаете, така че полезният товар на bundle.js за клиента ще бъде много по-малък.
Като пример, наскоро трябваше да използвам генератора на mongodb ObjectId в клиента. Открих, че Webpack не успя да се справи с import mongodb from 'mongodb'
компонент, така че ровейки се в зависимостите, открих, че mongodb
зависи от mongodb-core
което зависи от bson
който има ObjectId
метод, който ми трябваше.
Чрез импортиране само на bson
компонент на тази верига на зависимости, заобиколих проблема с Webpack и направих моя пакет много по-малък.
Ако използвате Npm 3, тогава има голям шанс bson
е инсталиран в корена на node_modules
ако вече използвате mongoose или mongodb, така че можете да import
без да поставяте изрична препратка към него във вашия package.json
. Това очевидно носи риск, че ако горната зависимост спре да зависи от нея, компилацията ви ще се счупи и ще трябва да npm install
то независимо. Предимството на използването на този подход е, че винаги ще използвате една и съща версия на bson
че горната зависимост използва, което може да е важно.