MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Modulo non trovato:errore:impossibile risolvere il modulo 'module' mongodb durante il raggruppamento con webpack

Quando Webpack raggruppa i tuoi moduli segue la catena di dipendenze del modulo che hai importato (o richiesto) e estrae tutte le sue dipendenze e le raggruppa fino alla fine della catena.

Se c'è un file che non sa come caricare in quella catena di dipendenze, verrà generato questo tipo di errore.

Questo a volte può essere risolto aggiungendo un caricatore che sappia come caricare questo tipo di dipendenza. Se, tuttavia, la dipendenza è un modulo non nativo, Webpack non può caricarlo. Alcuni dei caricatori sanno come caricare moduli con dipendenze non native eliminando ed escludendo la parte non nativa in modo che venga caricata. Nel fs modulo, ad esempio, non è necessario essere in grado di leggere e scrivere file dal disco perché il browser non può farlo, quindi non è necessario includere quella parte.

Ciò solleva la domanda:quale funzionalità del modulo mangusta hai bisogno nel browser? Puoi includere solo quella funzionalità e non l'intero modulo mangusta?

Se sei in grado di farlo, potresti essere in grado di risolvere 2 problemi:

  1. Potresti risolvere il problema del raggruppamento di Webpack perché la parte di mangusta che stai includendo nel tuo progetto non ha dipendenze secondarie problematiche.
  2. Creerai un pacchetto più piccolo con Webpack perché includerai solo le parti di cui hai bisogno, quindi il carico utile bundle.js per il client sarà molto più piccolo.

Ad esempio, di recente ho dovuto utilizzare il generatore di ObjectId mongodb nel client. Ho scoperto che Webpack non era in grado di gestire l'import mongodb from 'mongodb' componente così scavando nelle dipendenze ho trovato che mongodb dipende da mongodb-core che dipende da bson che ha il ObjectId metodo di cui avevo bisogno.

Importando solo il bson componente di quella catena di dipendenze ho aggirato il problema di Webpack e ho reso il mio bundle molto più piccolo.

Se stai usando Npm 3, ci sono buone probabilità che bson è installato nella radice di node_modules se stai già utilizzando mongoose o mongodb, puoi import senza inserire un riferimento esplicito ad esso nel tuo package.json . Questo ovviamente comporta il rischio che se la dipendenza superiore si interrompe a seconda di essa, la tua build si rompe e dovrai npm install esso in modo indipendente. Il vantaggio di utilizzare questo approccio è che utilizzerai sempre la stessa versione di bson che la dipendenza superiore sta usando, il che potrebbe essere importante.