sql >> Base de Datos >  >> NoSQL >> MongoDB

Módulo no encontrado:Error:no se puede resolver el módulo 'módulo' mongodb mientras se empaqueta con el paquete web

Cuando Webpack empaqueta sus módulos, sigue la cadena de dependencia del módulo que ha importado (o requerido) y extrae todas sus dependencias y también las empaqueta hasta el final de la cadena.

Si hay un archivo que no sabe cómo cargar en esa cadena de dependencia, se generará este tipo de error.

Esto a veces se puede resolver agregando un cargador que sepa cómo cargar este tipo de dependencia. Sin embargo, si la dependencia es un módulo no nativo, Webpack no puede cargarlo. Algunos de los cargadores saben cómo cargar módulos con dependencias no nativas bloqueando y excluyendo la parte no nativa para que se cargue. En el fs módulo, por ejemplo, no necesita poder leer y escribir archivos desde el disco porque el navegador no puede hacer eso, por lo que no es necesario incluir esa parte.

Esto plantea la pregunta:¿Qué funcionalidad del módulo mongoose necesita en el navegador? ¿Puedes incluir solo esa funcionalidad y no todo el módulo mongoose?

Si puede hacer esto, entonces podría resolver 2 problemas:

  1. Puede resolver el problema de la agrupación de Webpack porque la parte de mongoose que está incluyendo en su proyecto no tiene subdependencias problemáticas.
  2. Creará un paquete más pequeño con Webpack porque solo incluirá las partes que necesita, por lo que la carga útil de bundle.js para el cliente será mucho más pequeña.

Como ejemplo, recientemente necesité usar el generador de ObjectId de mongodb en el cliente. Descubrí que Webpack no pudo hacer frente a import mongodb from 'mongodb' componente por lo que indagando en las dependencias encontré que mongodb depende de mongodb-core que depende de bson que tiene el ObjectId método que necesitaba.

Importando solo el bson componente de esa cadena de dependencia solucioné el problema de Webpack e hice mi paquete mucho más pequeño.

Si está utilizando Npm 3, es muy probable que bson está instalado en la raíz de node_modules si ya está usando mongoose o mongodb, puede import sin poner una referencia explícita a él en su package.json . Obviamente, esto conlleva el riesgo de que si la dependencia superior deja de depender de ella, su compilación se romperá y deberá npm install de forma independiente. La ventaja de usar este enfoque es que siempre usará la misma versión de bson que la dependencia superior está usando, lo que podría ser importante.