No se puede encontrar el código del módulo '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: Error al cargar la extensión c ++ bson, utilizando la versión JS pura

156

Recibo el siguiente error:

{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } 
  js-bson: Failed to load c++ bson extension, using pure JS version

Aquí están los detalles de mi versión:

  • SO: Windows 7

  • MongoDB: 2.6.5

  • Nodo: 0.12.0

He intentado estas cosas antes de publicar el problema aquí.

  1. Fui a la \node-modules\mongoose\node-modules\mongodb\node-modules\bsoncarpeta e hice el siguiente cambio en el archivo vinculante-gyp de 'include_dirs': [ '<!(node -e "require(\'nan\')")' ] a 'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

  2. Ejecutó este comando npm install -g node-gyp

  3. He actualizado la versión de mangosta a 3.8.21 dentro package.json

Nada funciona. Por favor recomiende

navra
fuente
2
He intentado a continuación las opciones sugeridas por usted, pero fue en vano. Recibo el siguiente error {[Error: No se puede encontrar el código del módulo '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: Error al cargar la extensión c ++ bson, usando la versión pura de JS c: \ raj \ project \ meandemo \ node_modules \ express \ lib \ router \ route.js: 170 arrojar un nuevo error (msg); ^ Error: Route.get () requiere funciones de devolución de llamada pero obtuvo un [objeto indefinido] en la ruta. <anónimo>
navra
1
Por favor vea esta solución, ¡espero que funcione! Como la extensión BSON de C ++ también se requiere para varios otros módulos. Tenga en cuenta que esta solución es específica para Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan
Compruebe también las respuestas en esta pregunta: no se pudo cargar la extensión b ++ de c ++
totymedli
Posible duplicado de Error al cargar la extensión c ++ bson
mido

Respuestas:

165

Encuentra en el módulo npm mongodb:

.. \ node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

Cambiar la ruta a la versión js en el bloque catch:

bson = require('../build/Release/bson');

A:

bson = require('../browser_build/bson');

O copie el archivo en:

.. \ node_modules \ bson \ build \ Release \ bson

De:

.. \ node_modules \ bson \ browser_build \ bson

anydasa
fuente
1
¡Increíble! Sin embargo, el entorno local no debería ser nada trágico.
Manatax
44
bson = require ('../../../ browser_build / bson.js');
robor78
25
Esta no es una solución. Con el mismo resultado, puede eliminar cadenas que imprimen errores. Este error aparece debido a que no se encuentra el complemento nativo de c ++ para bson y, en este caso, la realización de js se utilizará de todos modos.
Alendorff
44
@Alendorff Cierto, pero eso es lo que la mayoría de nosotros buscamos. No me importa el complemento C ++, quiero deshacerme de las advertencias porque rompen el Node Inspector. Desde esta perspectiva, su sugerencia (eliminar impresiones de error) también es una solución, porque esto no debería ser un error, el código funciona bien con el respaldo de JS.
totymedli
3
Lo sentimos, el voto negativo como la segunda mejor respuesta aquí en realidad tiene la solución correcta, no pirateada: ¡Instale una versión no rota del paquete!
jrista
70

Tuve este problema hoy (19 de febrero de 2016) y lo resolví simplemente instalando la última versión de Mongoose. Intenta poner esto en tu paquete.json:

"mongoose": "~4.4"

Espero que ayude. ¡Lo resolvió por mí!

Matt West
fuente
1
Trabajó para mi. Creo que todo es un problema con una versión antigua de mangosta, que tuve al seguir un antiguo tutorial. OMI, esta debería ser la respuesta correcta.
Edward Newell
8
La mejor respuesta, todos los demás sobre la edición de código dentro de los módulos son hacks, no soluciones
bicicleta
2
La solución más directa sin la necesidad de meterse con node_modules / mongodb, etc. ¡Gracias!
mikeym 01 de
1
Uno de los mejores, simplemente desinstale mangosta (npm desinstale mongoose) y vuelva a instalarla nuevamente (npm install mongoose)
Grijan
18

El problema es que cuando instala mangosta a través de npm, se supone que tiene instalado Python en sus ventanas e intenta construir las bibliotecas necesarias. Como no tiene Python, omite la fase de construcción con una advertencia. Pero cuando inicia su aplicación, los módulos necesarios no están allí, por lo que obtiene este error.

Para hacer las cosas bien, primero instale Python (versión 2.7) en su computadora desde: https://www.python.org/downloads/ o si ha instalado chockolatey simplemente escriba choco install python2.

Luego, asegúrese de que su variable python esté configurada. Puede configurarlo en el símbolo del sistema como:

SET python=D:\Python27\python.exe

(Por supuesto, debe cambiar la ruta de acuerdo con su ubicación de python) Luego instale node-gyp:

npm install -g node-gyp

Ahora puede reinstalar mangosta o cualquier módulo que esté causando el problema:

npm install mongoose

Verá algunas líneas amarillas en lugar de las rojas esta vez, pero el error desaparecerá.

salihcenap
fuente
2
La versión del pitón es importante. node-gyp no funciona con la versión> 3.0
MatthieuLemoine
1
Esta no es una solución completa ... Todavía recibo el siguiente error: MSBUILD: error MSB3428: No se pudo cargar el componente de Visual C ++ "VCBuild.exe".
orszaczky
@TheRebel Está asumiendo la cadena de herramientas vs2010. Agregue --msvs-version=2012o 2013edependiendo de lo que haya instalado. Por ejemplonpm install mongoose --msvs-version=2012
RichieRich
qué hacer si estoy implementando la aplicación de nodo en la nube heroku.
jsbisht
15

Resolví este problema instalando la versión mogoose 3.8.23

npm install mongoose@3.8.23
Rishabh Garg
fuente
trabajé aquí ¿Es esta una versión anterior? por que funciono
Victor Ferreira
15

Esto funcionó para mí. Busque en su espacio de trabajo el texto:

"../build/Release/bson"

Probablemente lo encontrará dentro de los módulos mongose ​​y monk.

Luego reemplace cada uno:

bson = require('../build/Release/bson');

con:

bson = require('bson');

¡eso es todo!

kahlal
fuente
Recibí este error al intentar ejecutar las pruebas predeterminadas después de configurar un proyecto usando meanjs. Esto lo solucionó. Gracias.
RaneWrites
7

Probar npm install [email protected]y también reemplazar bson = require('../build/Release/bson');a

bson = require('../browser_build/bson'); en node_modules / bson / ext / index.js

Raghav Manikandan
fuente
Asegúrese de que la ruta a bson.js sea correcta. Para mí bson = require ('../ browser_build / bson.js'); trabajó. Compruebe también la versión mangosta antes de realizar la instalación.
Vikram Shetty
7

Esto funcionó para mí:

Vaya al archivo (en su proyecto):

node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js

y cambio:

bson = require('../build/Release/bson');

a:

bson = require('bson');

Referencia: https://github.com/mongodb/js-bson/issues/118

Franco
fuente
2
¿Cómo conseguiste que esta solución persistiera? ¿Revisó su node_modulesdirectorio en el control de fuente?
Mark Stosberg
7

Respuesta corta

Instale la última versión de mongodb.

Un poco más de respuesta

Asegúrese de que su package.json esté utilizando la última versión de mongodb, luego elimine node_modules / mongodb y vuelva a instalar npm. Si no usó mongodb como dependencia directa, intente encontrar qué paquete está usando mongdb. Solía:

find . -type f -name package.json | xargs grep mongodb
...
./sails-mongo/package.json:    "mongodb": "1.4.26",
...

Así que actualicé ./sails-mongo/package.json a:

"mongodb": "2.1.7",

Luego elimine node_modules / mongodb y vuelva a instalar npm. Parece bien ahora.

Respuesta aún más larga

No me gusta la forma actual sugerida de usar

require('../browser_build/bson')

Desde mirar ../browser_build/bson.js, un archivo de 4k + líneas, que también parece una implementación "no nativa". Por lo tanto, aunque no arrojará ninguna queja, todavía está "usando la versión JS pura", lo que significa un rendimiento más lento.

Mirando https://github.com/mongodb/js-bson/issues/145 y https://github.com/mongodb/js-bson/issues/165 , parece que el problema fue causado por:

antoniofruci comentó el 15 de septiembre de 2015

Me acabo de enterar de que el código de C ++ se ha eliminado hace 6 meses y ahora es una dependencia opcional: bson-ext. De hecho, si instala la última versión, no se produce ningún error.

Así que intenté eliminar todo el node_modules y aún obtuve el mismo error. Y mirando el paquete.json de node_modules / mongodb, su versión sigue siendo 1.4.26, no la última 2.1.7.

Aparentemente mi mongodb viene como una dependencia de otro paquete que instalé: sails-mongo. Modificando el package.json de sails-mongo y rehaciendo npm install finalmente resuelve el problema.

Peter
fuente
6

Al implementar Keystone JS CMS tuve el mismo error y creo que la solución más elegante es esta:

Instalar npm-check-updates:

root@keystonejs:~# npm install -g npm-check-updates

Dentro de su directorio de sitio clave, donde package.jsonse ubica, verifique las dependencias:

debian@keystonejs:~/myproject/manalcjim$ npm-check-updates -u

Luego actualice todos los paquetes:

debian@keystonejs:~/myproject/manalcjim$ npm install

Y, por último, si elige jadeplantillas, tal vez necesite instalar el jademódulo explícitamente:

debian@keystonejs:~/myproject/manalcjim$ npm install jade --save
Manuel Alcocer
fuente
5

La respuesta marcada es completamente incorrecta. Todo lo que hace es ocultar la declaración de registro de la consola y no hace nada para resolver el problema. También puede cerrar los ojos y obtendrá el mismo resultado.

El problema es causado por node-gyp y solo eso. Su propósito es compilar extensiones nativas para ciertos módulos como bson.

Si no lo hace , el código recurrirá a la versión JS y se lo informará amablemente a través del mensaje informativo:

Failed to load c++ bson extension, using pure JS version

Supongo que la pregunta es realmente sobre cómo compilar la extensión nativa de C ++ en lugar de simplemente no ver el mensaje, así que abordemos eso.

Para que el nodo-gyp funcione, su nodo-gyp debe estar actualizado con su nodo y compilador de C ++ (que diferirá según su sistema operativo). Tan importante como su módulo también debe estar actualizado.

Primero desinstale y reinstale node-gyp

npm un node-gyp -g;npm i node-gyp -g

Ahora necesitará desinstalar y reinstalar completamente cualquier módulo de nodo en su aplicación (que incluya también módulos instalados por requisitos) que tengan bson. Eso debería encargarse del error. Puede buscar 'Release / bson' y encontrar a los culpables.

find node_modules/ -type 'f' -exec grep -H 'Release/bson' {} \;

Y luego desinstale y reinstale estos módulos.

Más fácil es rehacer toda la node_modulescarpeta:

 rm -rf node_modules
 npm cache clear
 npm i

Si aún experimenta problemas, entonces 1) su módulo está desactualizado - verifique el rastreador de problemas en su repositorio o 2) tiene un conflicto potencial - a veces podemos tener un nodo-gyp local, por ejemplo. Puede ejecutarse node-gypsolo y verificar versiones.

cyberwombat
fuente
5

Al crear la configuración www.spotdekho.comen una windows10máquina nueva , no pude ejecutar el comando "nodemon web.js" debido al mismo error

"Error: no se puede encontrar el módulo '../build/Release/bson'"

Lo solucionó con los siguientes pasos:

  1. Cree la carpeta "Release" dentro de la ubicación "node_modules \ bson \ build \"
  2. Copie bson.js de "node_modules \ bson \ browser_build \"
  3. Pegue bson.js dentro de la carpeta "node_modules \ bson \ build \ Release".

Esto resolverá el problema.

PD: estoy usando mangosta versión 4.8.8.

Gracias :), espero que ayude a alguien.

Spotdekho
fuente
4

En mi caso, los bits que vienen con mangosta ( npm install mongoose) tienen una versión funcional del mongodbpaquete en sunode_modules carpeta.

Los siguientes pasos me ahorraron el trabajo de solucionar el problema:

  • npm install mongoose
  • copiar node_modules\mongoose\node_modules\mongodba mi node_modulescarpeta raíz (sobrescribir cualquier versión que venga con npm install mongodb)
  • ignore el Failed to load c++ bson extension...error (o cambie el código para guardar silencio sobre el problema)
Miguel
fuente
3

Cuando recibía errores como este, estaba actualizando del nodo v0.10 al nodo v4.xx. Lo que tenía que hacer era instalar una versión más nueva de gcc (creo que tenía gcc v4.4.xo algo así). Actualicé a gcc 4.7.2 y las cosas funcionaron después de eso.

BT
fuente
3

También tuve el mismo problema con bson.

probando una nueva versión de mangosta

npm install mongoose@4.4

resuelto el problema.

Massimo

Max Tamtam
fuente
3

Ejecute este comando para desinstalar mongoose npm uninstall --save mongoose; a continuación, vuelva a instalarlo, pero esta vez npminstala automáticamente la última versión de mongoose run npm install --save mongooseEsto funcionó para mí.

otoloye
fuente
2

Desafortunadamente, todas las respuestas anteriores son solo la mitad correctas. Tomó mucho tiempo resolver esto ...

Mongoose bson instalar a través de npm lanza advertencia y provoca el error ...

npm install -g node-gyp

git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild

¡Esto funciona como magia!

Rama Prashanth
fuente
2

Si está utilizando Windows 8.1, es posible que desee asegurarse de que está instalando sus módulos npm con el compilador visual studio correcto.

Tengo instalado Visual Studio 2012, este comando funciona para mí. (después de eliminar node_modules dir)

npm install --msvs_version = 2012

Por alguna razón, node-gyp está intentando usar la versión incorrecta del compilador de Visual Studio. También noté que el comando "npm install" estaba imprimiendo advertencias sobre las dependencias de no-gyp al instalar los módulos mongodb y mongoose.

Después de usar el msvs_version correcto, las advertencias de instalación de npm desaparecieron, así como la advertencia de la consola al ejecutar mi aplicación nodejs.

Es posible que también desee asegurarse de tener instalada la versión correcta de Python 2.7.X y no Python 3.0.X.

También deberá asegurarse de que Python esté en su ruta env.

Joseph Snow
fuente
Esto funcionó para mí en Windows 8.1 con Visual Studio Community Edition 2013 utilizandonpm install --msvs_version=2012
phocks
2

Lo único que me ayuda en Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Vuelva a instalar el nodo y Python con versiones x32.
Pasé mucho tiempo con este error (Error al cargar la extensión c ++ bson) y finalmente, cuando instalé el módulonode-gyp (para compilar complementos nativos) e incluso instalé Windows SDK con visual studio: nodejs no reconoció el módulo ensamblado bson.node como módulo. Después de reinstalar el problema se ha ido.

De nuevo, ¿qué significa este error?

En realidad, ni siquiera es un error. Todavía puedes usar mangosta. Pero en este caso, en lugar de la rápida realización nativa del módulo bson, obtienes js-realization, que es más lento. Vi muchos consejos como: "editar ruta en el interior de node_modules ...", que es totalmente inútil porque no resuelve el problema, sino que apaga los mensajes de error.

Alendorff
fuente
1

Prueba esto npm install bsonynpm update

Raghav Manikandan
fuente
1

Nunca debe cambiar los archivos en la carpeta de la biblioteca NODE_MODULES.

Esos archivos son el resultado de npm install comando.

Básicamente, creo que para los usuarios de Windows: la forma correcta es usar VM. Es lo que hago cuando trabajo desde casa.

Todo lo que necesita:

for CentOS: yum install gcc gcc-c++ make openssl-devel

for Debian/Ubuntu: apt-get install build-essential

y luego npm installo, si ya lo has hecho,npm update

Victor Perov
fuente
Dice justo en la pregunta que está usando Windows 7: ¿cómo ayudan los comandos de CentOS y Debian?
Thronk
1
Oh, de verdad, mi mal. No vi esa etiqueta
Victor Perov, el
1

La mejor solución para mí fue actualizar de node-mongodb 1.xa 2.x.

jczaplew
fuente
1

Me doy cuenta de que este hilo tiene más de 1 año, pero me ayudó, aunque con un módulo diferente.

Instalé mongoose-post-findv0.0.2 y comenzó este problema. Para solucionarlo, utilicé las sugerencias y navegué a \ node_modules \ mongoose-post-find \ node_modules \ bson \ ext y abrí el archivo index.js.

El archivo comienza con un bloque try try que requiere la versión correcta de bson

try {
    // Load the precompiled win32 binary
    if(process.platform == "win32" && process.arch == "x64") {
      bson = require('./win32/x64/bson');  
    } else if(process.platform == "win32" && process.arch == "ia32") {
      bson = require('./win32/ia32/bson');  
    } else {
      bson = require('../build/Release/bson');  
    }   
} catch(err) {
    // Attempt to load the release bson version
    try {
        bson = require('../browser_build/bson');
    } catch (err) {
        console.dir(err)
        console.error("js-bson: Failed to load c++ bson extension, using pure JS version");
        bson = require('../lib/bson/bson');
    }
}

Esta es la versión corregida. Lo que estaba sucediendo es que trató de cargar bson desde ../build/Release/bson, no pudo encontrarlo y cayó en la trampa. Se intentó cargar bson nuevamente desde ../build/Release/bson y, por supuesto, falló. Así que cambio la ruta en la captura para buscar en ../browser_build/bson. Esto resolvió el error.

Publico esto para completar.

Paul Stoner
fuente
1

Tuve el mismo problema después de la versión de actualización de ubuntu a 16.04. Resolví de esta manera, espero que ayude.

$rm -rf node_modules
$npm --save install bson
$npm --save install mongoose
$npm install
Enrico Giurin
fuente
1

En nuestro caso, la razón por la que no se encontró la versión b ++ de c ++ fue porque estábamos detrás de un proxy corporativo y algo en el proceso de compilación de BSON necesita comunicarse para buscar archivos. Cuando buscamos en node_modules / bson / builderror.log, vimos un error como este:

gyp WARN install got an error, rolling back install gyp ERR! configure error gyp ERR! stack Error: connect ECONNREFUSED gyp ERR! stack at errnoException (net.js:904:11) gyp ERR! stack at Object.afterConnect [as oncomplete] (net.js:895:19)

Lo que sugirió que el proxy podría ser el problema. La configuración de las variables de entorno http_proxy y https_proxy lo resolvió.

Perdón por volver a despertar comentarios sobre esto, pero quería publicar esto para cualquier otra persona que llegue a esto en el futuro ya que este hilo fue muy útil para resolver nuestro problema.

Matt M.
fuente
0

Intenté npm install mongoose --msvs_version = 2012, si tienes múltiples Visual instalados, funcionó para mí

AKID Ahmed
fuente
0

Primera copia del bson.jscódigo debrowser_build folder

segundo crea un nuevo archivo bson.jsy pega el código

tercero, guarde el nuevo archivo cerca de adentro index.js.

rktel
fuente
0

Estoy trabajando con el sistema operativo Windows 8.1 y tuve el mismo problema. La fuente del problema fue la versión de Python. Encontré que el problema de origen revisa el archivo ... \ node_modules \ mongodb \ node_modules \ mongodb-core \ node_modules \ kerberos \ builderror.log.

Instalé la versión correcta de Python (2.7.9 para 64 bits) y resolvió mi problema.

Nota: La versión instalada de python debe ser igual o mayor que 2.7.5 y menor que 3.0.0

hbuenoc
fuente
0

Lo he intentado bson = require('../browser_build/bson');pero acabo encontrando otro error

No se puede establecer la propiedad 'BSON_BINARY_SUBTYPE_DEFAULT' de undefined

Finalmente solucioné este problema simplemente por npm update, esto solucionará el módulo bson en mangosta.

unclejimbo
fuente
0

Entonces, tengo el mismo problema y sucede que la URL de mongoDB especificada no existe. Entonces, para solucionar esto, debe ir a la carpeta ".. \ server \ config \ environment" y editar en el archivo "development.js" el enlace a mongoDB.

Ejemplo:

// Development specific configuration
// ==================================
module.exports = {
  // MongoDB connection options
  mongo: {
    uri: 'mongodb://localhost/test2-dev'
  },

  seedDB: true
};

Entonces, cambie este "uri: 'mongodb: // localhost / test2-dev'" por alguna ruta real a su base de datos mongoDB.

Me alegrará si mi publicación ayudará a alguien ...

Maxim Vasilic
fuente
0

encontrar en el módulo npm mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

y cambiar la ruta a la versión js en el bloque catch

bson = require('../build/Release/bson');

a bson = require('../browser_build/bson');

try {
        // Load the precompiled win32 binary
        if(process.platform == "win32" && process.arch == "x64") {
          bson = require('./win32/x64/bson');  
        } else if(process.platform == "win32" && process.arch == "ia32") {
          bson = require('./win32/ia32/bson');  
        } else {
         bson = require('../browser_build/bson');  
        }   
    } catch(err) {
        // Attempt to load the release bson version
        try {
            bson = require('../browser_build/bson');
        } catch (err) {
            console.dir(err)
            console.error("js-bson: Failed to load c++ bson extension, using pure JS version");
            bson = require('../lib/bson/bson');
        }
    }
usuario3168528
fuente