Impossible de trouver le code du module '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: Impossible de charger l'extension bson c ++, en utilisant la version JS pure


156

J'obtiens l'erreur ci-dessous:

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

Voici les détails de ma version:

  • Système d'exploitation: Windows 7

  • MongoDB: 2.6.5

  • Nœud: 0.12.0

J'ai essayé ces choses avant de publier le problème ici.

  1. Je suis allé dans le \node-modules\mongoose\node-modules\mongodb\node-modules\bsondossier et j'ai modifié ci-dessous le fichier binding-gyp de 'include_dirs': [ '<!(node -e "require(\'nan\')")' ] à 'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

  2. Ran cette commande npm install -g node-gyp

  3. J'ai mis à jour la version mangouste à 3.8.21 à l'intérieur package.json

Rien ne fonctionne. Veuillez suggérer


2
J'ai essayé les options ci-dessous suggérées par vous mais en vain. J'obtiens l'erreur ci-dessous {[Erreur: Impossible de trouver le module '../build/Release/bson'] code: 'MODULE_NOT_FOUND'} js-bson: Impossible de charger l'extension c ++ bson, en utilisant la version JS pure c: \ raj \ project \ meandemo \ node_modules \ express \ lib \ router \ route.js: 170 throw new Error (msg); ^ Erreur: Route.get () nécessite des fonctions de rappel, mais a obtenu un [objet non défini] à Route. <anonyme>
navra


1
Veuillez voir cette solution, espérons que cela fonctionne! Comme l'extension C ++ BSON est également requise pour plusieurs autres modules. Veuillez noter que cette solution est spécifique pour Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan

Vérifiez également les réponses à cette question: Échec du chargement de l'extension bson c ++
totymedli

Réponses:


165

Trouvez dans le module npm mongodb:

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

Changez le chemin vers la version js dans le bloc catch:

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

À:

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

Ou copiez le fichier dans:

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

De:

.. \ node_modules \ bson \ browser_build \ bson


1
Impressionnant! Environnement local cependant, donc rien de tragique ne devrait arriver de toute façon.
Manatax

4
bson = require ('../../../ browser_build / bson.js');
robor78

25
Ce n'est pas une solution. Avec le même résultat, vous pouvez simplement supprimer les chaînes qui impriment l'erreur. Cette erreur apparaît à cause du plugin natif c ++ pour bson introuvable et dans ce cas la réalisation js sera utilisée de toute façon.
Alendorff

4
@Alendorff C'est vrai, mais c'est ce que la plupart d'entre nous recherchent. Je me fiche du plugin C ++, je veux me débarrasser des avertissements car ils cassent Node Inspector. De ce point de vue, votre suggestion (supprimer les impressions d'erreur) est également une solution, car cela ne devrait pas être une erreur, le code fonctionne bien avec le remplacement JS.
totymedli

3
Désolé, le vote négatif en tant que deuxième meilleure réponse ici a en fait la bonne solution, non-hack: installez une version non cassée du package!
jrista

70

J'ai eu ce problème aujourd'hui (19 février 2016) et je l'ai résolu simplement en installant la dernière version de Mongoose. Essayez de mettre ceci dans votre package.json:

"mongoose": "~4.4"

J'espère que cela pourra aider. Résolu pour moi!


1
A travaillé pour moi. Je pense que c'est tout un problème avec une ancienne version mangouste, que j'ai eue en suivant un ancien tutoriel. OMI, cela devrait être la bonne réponse.
Edward Newell

8
Meilleure réponse, tous les autres sur l'édition de code dans les modules sont des hacks et non des solutions
vélo

2
La solution la plus simple sans avoir à jouer avec node_modules / mongodb etc. Merci!
mikeym

1
L'un des meilleurs, désinstallez simplement mangouste (npm désinstallez mangouste) et réinstallez-le (npm install mangouste)
Grijan

18

Le problème est que lorsque vous installez mangouste via npm, cela suppose que python est installé sur vos fenêtres et tente de créer les bibliothèques requises. Puisque vous n'avez pas de python, il saute la phase de construction avec un avertissement. Mais lorsque vous démarrez votre application, les modules requis ne sont pas là, vous obtenez cette erreur.

Afin de bien faire les choses, installez d'abord python (version 2.7) sur votre ordinateur à partir de: https://www.python.org/downloads/ ou si vous avez installé chockolatey, tapez simplement choco install python2.

Assurez-vous ensuite que votre variable python est définie. Vous pouvez le définir sur l'invite de commande comme:

SET python=D:\Python27\python.exe

(Bien sûr, vous devriez changer le chemin en fonction de votre emplacement de python) Puis installez node-gyp:

npm install -g node-gyp

Vous pouvez maintenant réinstaller la mangouste ou tout autre module à l'origine du problème:

npm install mongoose

Vous verrez des lignes jaunes au lieu de rouges cette fois, mais l'erreur aura disparu.


2
La version de python est importante. node-gyp ne fonctionne pas avec la version> 3.0
MatthieuLemoine

1
Ce n'est pas une solution complète ... J'obtiens toujours l'erreur suivante: MSBUILD: erreur MSB3428: Impossible de charger le composant Visual C ++ "VCBuild.exe".
orszaczky

@TheRebel Il suppose la chaîne d'outils vs2010. Ajoutez --msvs-version=2012ou 2013eselon ce que vous avez installé. par exemplenpm install mongoose --msvs-version=2012
RichieRich

que faire si je déploie l'application de nœud sur le cloud heroku.
jsbisht

15

J'ai résolu ce problème en installant la version mogoose 3.8.23

npm install mongoose@3.8.23

travaillé ici. est-ce une version plus ancienne? pourquoi cela a-t-il fonctionné?
Victor Ferreira

15

Cela a fonctionné pour moi. Recherchez le texte dans votre espace de travail:

"../build/Release/bson"

Vous le trouverez probablement dans les modules mangose ​​et moine.

Puis remplacez chacun:

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

avec:

bson = require('bson');

c'est tout!


J'obtenais cette erreur en essayant d'exécuter les tests par défaut après avoir configuré un projet à l'aide de meanjs. Cela l'a corrigé. Merci.
RaneWrites

7

Essayez npm install mongoose@3.8.23et remplacez également bson = require('../build/Release/bson');par

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


Assurez-vous que le chemin d'accès au fichier bson.js est correct. Pour moi bson = require ('../ browser_build / bson.js'); travaillé. Vérifiez également la version mangouste avant de procéder à l'installation.
Vikram Shetty

7

Cela a fonctionné pour moi:

Accédez au fichier (dans votre projet):

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

et changer:

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

à:

bson = require('bson');

Référence: https://github.com/mongodb/js-bson/issues/118


2
Comment avez-vous obtenu ce correctif pour persister? Avez-vous archivé votre node_modulesrépertoire dans le contrôle de code source?
Mark Stosberg

7

Réponse courte

Installez la dernière version de mongodb.

Une réponse un peu plus longue

Assurez-vous que votre package.json utilise la dernière version de mongodb, puis supprimez node_modules / mongodb et refaites l'installation de npm. Si vous n'avez pas utilisé mongodb comme dépendance directe, essayez de trouver quel package utilise mongdb. J'ai utilisé:

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

J'ai donc mis à jour ./sails-mongo/package.json pour:

"mongodb": "2.1.7",

Supprimez ensuite node_modules / mongodb et refaites l'installation de npm. Ça va bien maintenant.

Réponse encore plus longue

Je n'aime pas la manière actuelle d'utilisation suggérée

require('../browser_build/bson')

Depuis la recherche de ../browser_build/bson.js, un fichier de 4k + lignes, qui semble aussi une implémentation "non native". Donc, même s'il ne crachera aucune plainte, il "utilise toujours la version JS pure", ce qui signifie des performances plus lentes.

En regardant https://github.com/mongodb/js-bson/issues/145 et https://github.com/mongodb/js-bson/issues/165 , il semble que le problème ait été causé par:

antoniofruci a commenté le 15 sept. 2015

Je viens de découvrir que le code c ++ a été déplacé il y a 6 mois et qu'il s'agit maintenant d'une dépendance optionnelle: bson-ext. En effet, si vous installez la dernière version, aucune erreur ne se produit.

J'ai donc essayé de supprimer l'ensemble des node_modules et j'ai toujours la même erreur. Et en regardant package.json de node_modules / mongodb, sa version est toujours 1.4.26, pas la dernière 2.1.7.

Apparemment, mon mongodb est une dépendance d'un autre paquet que j'ai installé: sails-mongo. La modification du package.json de sails-mongo et la refonte de npm install résolvent enfin le problème.


6

Déploiement du CMS Keystone JS J'ai eu la même erreur et je pense que la solution la plus élégante est la suivante:

Installer npm-check-updates:

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

Dans le répertoire de votre site Keystone, où package.jsonest placé, vérifiez les dépendances:

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

Ensuite, mettez à jour tous les packages:

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

Et enfin, si vous avez choisi jadedes modèles, vous aurez peut-être besoin d'un jademodule d' installation explicite:

debian@keystonejs:~/myproject/manalcjim$ npm install jade --save

5

La réponse marquée est complètement fausse. Tout ce que cela fait, c'est masquer l'instruction du journal de la console et ne rien faire pour résoudre le problème. Vous pouvez également fermer les yeux et cela obtiendra le même résultat.

Le problème est causé par node-gyp et seulement cela. Son but est de compiler des extensions natives pour certains modules comme bson.

Si elle ne parvient pas à le faire alors le code fallback à la version JS et de bien vouloir vous le dire par le message d' information:

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

Je suppose que la question est vraiment de savoir comment compiler l'extension C ++ native plutôt que de ne pas voir le message, alors abordons cela.

Pour que node-gyp fonctionne, votre node-gyp doit être à jour avec votre nœud et votre compilateur C ++ (qui différeront en fonction de votre système d'exploitation). Tout aussi important, votre module doit également être à jour.

Commencez par désinstaller et réinstaller node-gyp

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

Vous devrez maintenant désinstaller et réinstaller complètement tout module de nœud dans votre application (qui comprend également les modules installés par les exigences) qui ont bson. Cela devrait régler l'erreur. Vous pouvez rechercher «Release / bson» et trouver les coupables.

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

Ensuite, désinstallez et réinstallez ces modules.

Le plus simple est de simplement refaire le node_modulesdossier entier :

 rm -rf node_modules
 npm cache clear
 npm i

Si vous rencontrez toujours des problèmes, soit 1) votre module est obsolète - vérifiez le suivi des problèmes dans leur dépôt ou 2) vous avez un conflit potentiel - parfois, nous pouvons avoir un node-gyp local par exemple. Vous pouvez exécuter node-gyppar lui-même et vérifier les versions.


5

Lors de la création de la configuration pour une www.spotdekho.comnouvelle windows10machine, je n'ai pas pu exécuter la commande en "nodemon web.js" raison de la même erreur

"Erreur: impossible de trouver le module '../build/Release/bson'"

Je l'ai réparé par les étapes ci-dessous:

  1. Créer le dossier "Release" dans l'emplacement "node_modules \ bson \ build \"
  2. Copiez bson.js depuis "node_modules \ bson \ browser_build \"
  3. Collez bson.js dans le dossier "node_modules \ bson \ build \ Release".

Cela résoudra le problème.

PS: J'utilise la version 4.8.8 de mangouste.

Merci :), j'espère que cela aide quelqu'un.


4

Dans mon cas, les bits fournis avec mongoose ( npm install mongoose) ont une version de travail du mongodbpackage dans son node_modulesdossier.

Les étapes suivantes m'ont sauvé le travail de résolution du problème:

  • npm install mongoose
  • copier node_modules\mongoose\node_modules\mongodbdans mon node_modulesdossier racine (en écrasant toute version fournie avec npm install mongodb)
  • ignorez l' Failed to load c++ bson extension...erreur (ou modifiez le code pour rester silencieux sur le problème)

3

Lorsque j'obtenais des erreurs comme celle-ci, je passais du nœud v0.10 au nœud v4.xx. Ce que je devais faire était d'installer une version plus récente de gcc (je pense que j'avais gcc v4.4.x ou quelque chose du genre). J'ai mis à jour vers gcc 4.7.2 et les choses ont fonctionné par la suite.


3

J'ai aussi eu le même problème avec bson.

essayer une version plus récente de la mangouste

npm install mongoose@4.4

résolu le problème.

Massimo.


3

Exécutez cette commande pour désinstaller mangouste npm uninstall --save mongoose- puis réinstallez-la, mais cette fois npminstalle automatiquement la dernière version de mangouste run npm install --save mongooseCela a fonctionné pour moi.


2

Malheureusement, toutes les réponses ci-dessus ne sont qu'à moitié exactes. Il a fallu beaucoup de temps pour comprendre cela.

Mongoose bson install via npm jette un avertissement et provoque l'erreur ...

npm install -g node-gyp

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

Cela fonctionne comme par magie !!


2

Si vous utilisez Windows 8.1, vous voudrez peut-être vous assurer que vous installez vos modules npm avec le bon compilateur Visual Studio.

J'ai installé Visual Studio 2012, cette commande fonctionne pour moi. (après suppression du répertoire node_modules)

npm install --msvs_version = 2012

Pour une raison quelconque, node-gyp essaie d'utiliser la version incorrecte du compilateur Visual Studio. J'ai également remarqué que la commande "npm install" imprimait un avertissement concernant les dépendances not node-gyp lors de l'installation des modules mongodb et mongoose.

Après avoir utilisé la bonne version msvs_version, les avertissements d'installation de npm ont disparu ainsi que l'avertissement de la console lors de l'exécution de mon application nodejs.

Vous voudrez peut-être également vous assurer que vous avez la bonne version de Python 2.7.X installée et non Python 3.0.X.

Vous devrez également vous assurer que python est dans votre chemin d'environnement.


Cela a fonctionné pour moi sur Windows 8.1 avec Visual Studio Community Edition 2013 en utilisantnpm install --msvs_version=2012
phocks

2

La seule chose qui m'aide sur Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Réinstallez le nœud et python avec les versions x32.
J'ai passé beaucoup de temps avec cette erreur (Échec du chargement de l'extension c ++ bson) et enfin, lorsque j'ai installé le module node-gyp(pour construire des addons natifs) et même installé le SDK Windows avec Visual Studio - nodejs n'a pas reconnu le module assemblé bson.node comme module. Après la réinstallation, le problème a disparu.

Encore une fois, que signifie cette erreur?

En fait, ce n'est même pas une erreur. Vous pouvez toujours utiliser la mangouste. Mais dans ce cas, au lieu d'une réalisation native rapide du module bson, vous avez la réalisation js, qui est plus lente. J'ai vu de nombreux conseils comme: "modifier le chemin au fond de node_modules ..." - ce qui est totalement inutile car cela ne résout pas le problème mais vient de désactiver les messages d'erreur.



1

Vous ne devez jamais modifier les fichiers dans le dossier de la bibliothèque NODE_MODULES.

Ces fichiers sont le résultat de npm install commande.

Fondamentalement, je pense que pour les utilisateurs de Windows, la bonne façon est d'utiliser VM. C'est ce que je fais quand je travaille à domicile.

Tout ce dont tu as besoin:

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

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

et puis npm installou, si vous l'avez déjà fait -npm update


Il dit juste dans la question qu'il utilise Windows 7 - comment CentOS et la commande Debian aident-ils?
Thronk

1
Oh, vraiment, mon mal. Je n'ai pas vu ce tag
Victor Perov

1

La meilleure solution pour moi était de passer de node-mongodb 1.x à 2.x.


1

Je me rends compte que ce fil a 1 an et plus, mais il m'a aidé, bien qu'avec un module différent.

J'ai installé mongoose-post-findv0.0.2 et ce problème a commencé. Pour résoudre ce problème, j'ai utilisé les suggestions et accédé à \ node_modules \ mongoose-post-find \ node_modules \ bson \ ext et ouvert le fichier index.js.

Le fichier commence par un bloc try catch essayant d'exiger la version correcte 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');
    }
}

c'est la version corrigée. Ce qui se passait, c'est qu'il a essayé de charger bson à partir de ../build/Release/bson, n'a pas pu le trouver et est tombé dans le piège. On a essayé de charger à nouveau bson à partir de ../build/Release/bson et a bien sûr échoué. Je change donc le chemin dans la capture pour regarder dans ../browser_build/bson. Cela a résolu l'erreur.

Je poste ceci par souci d'exhaustivité.


1

J'ai eu le même problème après la mise à niveau de la version d'ubuntu vers 16.04. J'ai résolu de cette façon, j'espère que cela aide.

$rm -rf node_modules
$npm --save install bson
$npm --save install mongoose
$npm install

1

Dans notre cas, la raison pour laquelle la version c ++ bson n'a pas été trouvée était que nous étions derrière un proxy d'entreprise et que quelque chose dans le processus de construction BSON doit atteindre pour récupérer les fichiers. Lorsque nous avons regardé dans node_modules / bson / builderror.log, nous avons vu une erreur comme celle-ci:

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)

Ce qui suggérait que le proxy pourrait être le problème. La définition des variables d'environnement http_proxy et https_proxy a résolu le problème.

Désolé d'avoir réveillé les commentaires à ce sujet, mais je voulais le publier pour toute autre personne qui le rencontrera à l'avenir, car ce fil de discussion a été très utile pour résoudre notre problème.


0

J'ai essayé npm install mongoose --msvs_version = 2012, si vous avez plusieurs Visual installés, cela a fonctionné pour moi


0

Première copie du bson.jscode depuisbrowser_build folder

deuxième créer un nouveau fichier bson.jset coller le code

troisième enregistrez le nouveau fichier à proximité de dans index.js.


0

Je travaille avec OS Windows 8.1 et j'ai eu le même problème. La source du problème était la version de Python. J'ai trouvé le problème d'origine en examinant le fichier ... \ node_modules \ mongodb \ node_modules \ mongodb-core \ node_modules \ kerberos \ builderror.log.

J'ai installé la bonne version de Python (2.7.9 pour 64 bits) et cela a résolu mon problème.

Remarque: la version installée de python doit être égale ou supérieure à 2.7.5 et inférieure à 3.0.0


0

J'ai essayé bson = require('../browser_build/bson');mais j'ai fini par rencontrer une autre erreur

Impossible de définir la propriété 'BSON_BINARY_SUBTYPE_DEFAULT' sur undefined

Enfin, j'ai résolu ce problème simplement en npm updatecorrigeant le module bson dans mangouste.


0

Donc, j'ai le même problème et il se produit que l'URL mongoDB spécifiée n'existe pas. Donc, pour résoudre ce problème, vous devez aller dans le dossier ".. \ server \ config \ environment" et éditer dans le fichier "development.js" le lien vers mongoDB.

Exemple:

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

  seedDB: true
};

Donc, changez cet "uri: 'mongodb: // localhost / test2-dev'" en un chemin réel vers votre base de données mongoDB.

Je serai heureux si mon message aidera quelqu'un ...


0

trouver dans le module npm mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

et changez le chemin vers la version js dans le bloc catch

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

à 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');
        }
    }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.