Nie można znaleźć modułu „../build/Release/bson”] kod: „MODULE_NOT_FOUND”} js-bson: Nie udało się załadować rozszerzenia c ++ bson, używając czystej wersji JS

156

Otrzymuję następujący błąd:

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

Oto szczegóły mojej wersji:

  • System operacyjny: Windows 7

  • MongoDB: 2.6.5

  • Węzeł: 0.12.0

Próbowałem tych rzeczy, zanim opublikowałem problem tutaj.

  1. Poszedłem do \node-modules\mongoose\node-modules\mongodb\node-modules\bsonfolderu i dokonałem poniżej zmiany w pliku bind-gyp z 'include_dirs': [ '<!(node -e "require(\'nan\')")' ] do 'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

  2. Uruchomiłem to polecenie npm install -g node-gyp

  3. Zaktualizowałem wersję Mongoose do 3.8.21 inside package.json

Nic nie działa. Proszę zasugeruj

navra
źródło
2
Próbowałem poniższych opcji sugerowanych przez ciebie, ale bezskutecznie. Otrzymuję poniższy błąd {[Błąd: nie można znaleźć modułu '../build/Release/bson'] kod: 'MODULE_NOT_FOUND'} js-bson: Nie udało się załadować rozszerzenia c ++ bson, używając czystej wersji JS c: \ raj \ project \ meandemo \ node_modules \ express \ lib \ router \ route.js: 170 wyrzuć nowy błąd (msg); ^ Błąd: Route.get () wymaga funkcji zwrotnych, ale otrzymano [obiekt Undefined] na Route. <anonymous>
navra
1
Zobacz to rozwiązanie, mam nadzieję, że zadziała! Ponieważ rozszerzenie C ++ BSON jest wymagane również dla kilku innych modułów. Należy pamiętać, że to rozwiązanie jest specyficzne dla Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan
Sprawdź również odpowiedzi na to pytanie: Nie udało się załadować rozszerzenia c ++ bson
totymedli
Możliwy duplikat rozszerzenia Failed to load c ++ bson
mido

Odpowiedzi:

165

Znajdź w module npm mongodb:

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

Zmień ścieżkę do wersji js w bloku catch:

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

Do:

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

Lub skopiuj plik w:

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

Z:

.. \ node_modules \ bson \ browser_build \ bson

anydasa
źródło
1
Niesamowite! Jednak środowisko lokalne, więc nic tragicznego nie powinno się wydarzyć.
Manatax
4
bson = require ('../../../ browser_build / bson.js');
robor78
25
To nie jest rozwiązanie. Z tym samym rezultatem możesz po prostu usunąć łańcuchy, które wypisują błąd. Ten błąd pojawia się, ponieważ nie znaleziono natywnej wtyczki c ++ dla bson iw tym przypadku realizacja js zostanie użyta i tak.
Alendorff
4
@Alendorff Prawda, ale tego właśnie szuka większość z nas. Nie obchodzi mnie wtyczka C ++, chcę pozbyć się ostrzeżeń, ponieważ psują Node Inspector. Z tej perspektywy Twoja sugestia (usunięcie wydruków błędów) jest również rozwiązaniem, ponieważ nie powinno to być błędem, kod działa dobrze z awaryjnym kodem JS.
totymedli
3
Przepraszamy, odrzucenie jako druga najlepsza odpowiedź ma w rzeczywistości właściwe, niehackowe rozwiązanie: zainstaluj niezepsutą wersję pakietu!
jrista
70

Miałem ten problem dzisiaj (19 lutego 2016 r.) I rozwiązałem go po prostu instalując najnowszą wersję Mongoose. Spróbuj umieścić to w swoim pliku package.json:

"mongoose": "~4.4"

Mam nadzieję, że to pomoże. Rozwiązałem to za mnie!

Matt West
źródło
1
Pracował dla mnie. Myślę, że to wszystko problem ze starą wersją mangusty, którą miałem, śledząc stary tutorial. IMO to powinna być prawidłowa odpowiedź.
Edward Newell
8
Najlepsza odpowiedź, wszystkie inne dotyczące edycji kodu w modułach to hacki, a nie rozwiązania
rower
2
Najbardziej proste rozwiązanie bez potrzeby mieszania się z node_modules / mongodb itp. Dzięki!
mikeym
1
Jeden z najlepszych, po prostu odinstaluj mongoose (npm uninstall mongoose) i zainstaluj go ponownie (npm install mongoose)
Grijan
18

Problem polega na tym, że gdy instalujesz mongoose przez npm, zakłada się, że masz zainstalowany python w systemie Windows i próbuje zbudować wymagane biblioteki. Ponieważ nie masz Pythona, pomija fazę budowania z ostrzeżeniem. Ale po uruchomieniu aplikacji nie ma wymaganych modułów, więc pojawia się ten błąd.

Aby wszystko zrobić dobrze, najpierw zainstaluj Pythona (wersja 2.7) na swoim komputerze z: https://www.python.org/downloads/ lub jeśli masz zainstalowany chockolatey, po prostu wpisz choco install python2.

Następnie upewnij się, że zmienna Pythona jest ustawiona. Możesz ustawić go w wierszu polecenia, na przykład:

SET python=D:\Python27\python.exe

(Oczywiście powinieneś zmienić ścieżkę zgodnie z lokalizacją Pythona) Następnie zainstaluj node-gyp:

npm install -g node-gyp

Teraz możesz ponownie zainstalować mongoose lub inny moduł powodujący problem:

npm install mongoose

Tym razem zobaczysz żółte linie zamiast czerwonych, ale błąd zniknie.

salihcenap
źródło
2
Wersja Pythona jest ważna. node-gyp nie działa z wersją> 3.0
MatthieuLemoine
1
To nie jest pełne rozwiązanie ... Nadal otrzymuję następujący błąd: MSBUILD: błąd MSB3428: Nie można załadować składnika Visual C ++ „VCBuild.exe”.
orszaczky
@TheRebel Zakłada, że ​​łańcuch narzędzi vs2010. Dodaj --msvs-version=2012lub w 2013ezależności od tego, co zainstalowałeś. np.npm install mongoose --msvs-version=2012
RichieRich
co zrobić, jeśli wdrażam aplikację node w chmurze heroku.
jsbisht
15

Rozwiązałem ten problem, instalując wersję mogoose 3.8.23

npm install mongoose@3.8.23
Rishabh Garg
źródło
pracował tutaj. czy to jest starsza wersja? dlaczego to zadziałało?
Victor Ferreira
15

To zadziałało dla mnie. Wyszukaj w swoim obszarze roboczym tekst:

"../build/Release/bson"

Znajdziesz go prawdopodobnie wewnątrz modułów mongos i mnichów.

Następnie wymień każdy:

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

z:

bson = require('bson');

to wszystko!

kahlal
źródło
Otrzymałem ten błąd podczas próby uruchomienia domyślnych testów po skonfigurowaniu projektu przy użyciu meanjs. To naprawiło. Dzięki.
RaneWrites
7

Spróbuj, npm install [email protected]a także zamień bson = require('../build/Release/bson');na

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

Raghav Manikandan
źródło
Upewnij się, że ścieżka do bson.js jest poprawna. Dla mnie bson = require ('../ browser_build / bson.js'); pracował. Przed przystąpieniem do instalacji sprawdź także wersję mongoose.
Vikram Shetty
7

To zadziałało dla mnie:

Przejdź do pliku (w swoim projekcie):

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

i zmień:

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

do:

bson = require('bson');

Źródła: https://github.com/mongodb/js-bson/issues/118

Franco
źródło
2
Jak udało Ci się to naprawić? Czy sprawdziłeś node_moduleskatalog w kontroli źródła?
Mark Stosberg
7

Krótka odpowiedź

Zainstaluj najnowszą wersję mongodb.

Trochę dłuższa odpowiedź

Upewnij się, że plik package.json używa najnowszej wersji mongodb, a następnie usuń node_modules / mongodb i ponownie zainstaluj npm. Jeśli nie używałeś mongodb jako bezpośredniej zależności, spróbuj znaleźć pakiet, który używa mongdb. Użyłem:

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

Więc zaktualizowałem ./sails-mongo/package.json do:

"mongodb": "2.1.7",

Następnie usuń node_modules / mongodb i ponownie zainstaluj npm. Teraz wydaje się dobrze.

Jeszcze dłuższa odpowiedź

Nie podoba mi się obecny sugerowany sposób używania

require('../browser_build/bson')

Od czasu przyjrzenia się ../browser_build/bson.js, plikowi 4k + linii, który również wydaje się być implementacją „nierodzimą”. Więc chociaż nie wypluwa żadnych narzekań, nadal „używa czystej wersji JS”, ​​co oznacza wolniejsze działanie.

Patrząc na https://github.com/mongodb/js-bson/issues/145 i https://github.com/mongodb/js-bson/issues/165 , wydaje się, że przyczyną problemu były:

antoniofruci skomentował 15 września 2015 r

Właśnie dowiedziałem się, że kod c ++ został przeniesiony 6 miesięcy temu i jest teraz opcjonalną zależnością: bson-ext. Rzeczywiście, jeśli zainstalujesz najnowszą wersję, nie wystąpi błąd.

Więc próbowałem usunąć całe node_modules i nadal otrzymywałem ten sam błąd. Patrząc na plik package.json z node_modules / mongodb, jego wersja to nadal 1.4.26, a nie najnowsza 2.1.7.

Najwyraźniej mój mongodb jest zależny od innego zainstalowanego pakietu: sails-mongo. Modyfikacja pliku package.json z sails-mongo i ponowne wykonanie instalacji npm ostatecznie rozwiązuje problem.

Piotr
źródło
6

Wdrażając Keystone JS CMS miałem ten sam błąd i myślę, że najbardziej eleganckie rozwiązanie to:

Zainstaluj npm-check-updates:

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

W katalogu witryny keystone, w której się package.jsonznajduje, sprawdź zależności:

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

Następnie zaktualizuj wszystkie pakiety:

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

I wreszcie, jeśli wybrałeś jadeszablony, być może będziesz potrzebować jadejawnie modułu instalacji :

debian@keystonejs:~/myproject/manalcjim$ npm install jade --save
Manuel Alcocer
źródło
5

Zaznaczona odpowiedź jest całkowicie błędna. Wszystko, co robi, to ukrywanie instrukcji dziennika konsoli i nic nie robi, aby rozwiązać faktyczny problem. Możesz także zamknąć oczy, a osiągniesz ten sam efekt.

Problem jest spowodowany przez node-gyp i tylko to. Jego celem jest kompilacja natywnych rozszerzeń dla określonych modułów, takich jak bson.

Jeśli nie udaje mu się tak wtedy kod będzie awaryjne wersji JS i łaskawie powiedzieć więc poprzez komunikat informacyjny:

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

Zakładam, że tak naprawdę chodzi o to, jak skompilować natywne rozszerzenie C ++, a nie tylko nie widzieć wiadomości, więc zajmijmy się tym.

Aby node-gyp działał, twój node-gyp musi być na bieżąco z twoim węzłem i kompilatorem C ++ (który będzie się różnić w zależności od twojego systemu operacyjnego). Co równie ważne, Twój moduł musi być aktualny.

Najpierw odinstaluj i ponownie zainstaluj node-gyp

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

Teraz będziesz musiał w pełni odinstalować i ponownie zainstalować dowolny moduł węzła w swojej aplikacji (w tym również moduły zainstalowane przez wymagania), które mają bson. To powinno rozwiązać problem. Możesz wyszukać „Release / bson” i znaleźć winowajców.

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

Następnie odinstaluj i ponownie zainstaluj te moduły.

Łatwiej jest po prostu powtórzyć cały node_modulesfolder:

 rm -rf node_modules
 npm cache clear
 npm i

Jeśli nadal występują problemy, to albo 1) twój moduł jest nieaktualny - sprawdź tracker problemów w ich repozytorium lub 2) masz potencjalny konflikt - czasami możemy mieć na przykład lokalny węzeł gyp. Możesz działać node-gypsamodzielnie i weryfikować wersje.

cyberwombat
źródło
5

Podczas tworzenia konfiguracji dla www.spotdekho.comnowej windows10maszyny nie mogłem uruchomić polecenia z "nodemon web.js" powodu tego samego błędu

„Błąd: nie można znaleźć modułu '../build/Release/bson'”

Naprawiono to, wykonując poniższe czynności:

  1. Utwórz folder „Release” w lokalizacji „node_modules \ bson \ build \”
  2. Skopiuj plik bson.js z „node_modules \ bson \ browser_build \”
  3. Wklej plik bson.js do folderu „node_modules \ bson \ build \ Release”.

To rozwiąże problem.

PS: Używam wersji Mongoose 4.8.8.

Dzięki :), mam nadzieję, że to komuś pomoże.

Spotdekho
źródło
4

W moim przypadku bity dostarczane z mongoose ( npm install mongoose) mają działającą wersję mongodbpakietu w swoim node_modulesfolderze.

Poniższe kroki pozwoliły mi zaoszczędzić pracę przy rozwiązywaniu problemu:

  • npm install mongoose
  • skopiuj node_modules\mongoose\node_modules\mongodbdo mojego node_modulesfolderu głównego (nadpisując każdą dostarczoną wersję npm install mongodb)
  • zignoruj Failed to load c++ bson extension...błąd (lub zmień kod, aby milczeć w sprawie)
Michael
źródło
3

Kiedy otrzymywałem takie błędy, przeprowadzałem aktualizację z węzła v0.10 do węzła v4.xx. Musiałem zainstalować nowszą wersję gcc (myślę, że miałem gcc v4.4.x lub coś w tym rodzaju). Zaktualizowałem do gcc 4.7.2 i po tym wszystko działało.

BT
źródło
3

Miałem też ten sam problem z bsonem.

wypróbowanie nowszej wersji mangusty

npm install mongoose@4.4

rozwiązał problem.

Massimo.

Max Tamtam
źródło
3

Uruchom to polecenie, aby odinstalować mongoose npm uninstall --save mongoose- następnie zainstaluj go ponownie, ale tym razem npmautomatycznie zainstaluje najnowszą wersję mongoose run. npm install --save mongooseTo zadziałało dla mnie.

otoloye
źródło
2

Niestety, wszystkie powyższe odpowiedzi są tylko w połowie poprawne. Rozszyfrowanie tego zajęło dużo czasu ..

Mongoose bson install przez npm wyrzuca ostrzeżenie i powoduje błąd ...

npm install -g node-gyp

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

To działa jak magia !!

Rama Prashanth
źródło
2

Jeśli używasz systemu Windows 8.1, możesz chcieć upewnić się, że instalujesz moduły npm z poprawnym kompilatorem programu Visual Studio.

Mam zainstalowany program Visual Studio 2012, to polecenie działa dla mnie. (po usunięciu katalogu node_modules)

npm install --msvs_version = 2012

Z jakiegoś powodu node-gyp próbuje użyć niepoprawnej wersji kompilatora programu Visual Studio. Zauważyłem również, że polecenie "npm install" wyświetlało ostrzeżenia o zależnościach nie związanych z węzłem-gyp podczas instalowania modułów mongodb i mongoose.

Po użyciu poprawnej wersji msvs_version zniknęły ostrzeżenia dotyczące instalacji npm, a także ostrzeżenie konsoli podczas uruchamiania aplikacji nodejs.

Możesz również chcieć upewnić się, że masz zainstalowaną poprawną wersję Pythona 2.7.X, a nie Pythona 3.0.X.

Musisz również upewnić się, że w ścieżce env znajduje się język Python.

Joseph Snow
źródło
To zadziałało dla mnie w systemie Windows 8.1 z Visual Studio Community Edition 2013 przy użyciunpm install --msvs_version=2012
phocks
2

Jedyne, co mi pomaga w Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Zainstaluj ponownie węzeł i język Python w wersjach x32.
Spędziłem wiele czasu z tym błędem (Failed to load c ++ bson extension) i wreszcie, kiedy zainstalowałem moduł node-gyp(do budowania natywnych dodatków), a nawet zainstalowałem Windows SDK z Visual Studio - nodejs nie rozpoznał zmontowanego modułu bson.node jako moduł. Po ponownej instalacji problem zniknął.

Ponownie, co oznacza ten błąd?

Właściwie to nawet nie jest błąd. Nadal możesz używać mangusty. Ale w tym przypadku, zamiast szybkiej natywnej realizacji modułu bson, otrzymałeś wykonanie js, które wolniej. Widziałem wiele wskazówek, takich jak: „edytuj ścieżkę głęboko w node_modules ...” - które są całkowicie bezużyteczne, ponieważ nie rozwiązują problemu, a jedynie wyłączają komunikaty o błędach.

Alendorff
źródło
1

Spróbuj tego npm install bsoninpm update

Raghav Manikandan
źródło
1

Nigdy nie należy zmieniać plików w folderze biblioteki NODE_MODULES.

Te pliki są wynikiem npm install polecenia.

Zasadniczo myślę, że dla użytkowników Windowsa - właściwym sposobem jest użycie VM. To właśnie robię, gdy pracuję w domu.

Wszystko czego potrzebujesz:

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

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

a następnie npm installlub, jeśli już to zrobiłeś -npm update

Victor Perov
źródło
Mówi bezpośrednio w pytaniu, które używa Windows 7 - w jaki sposób pomaga polecenie CentOS i Debian?
Thronk
1
Och, naprawdę, moja wina. Nie widziałem tego tagu
Victor Perov
1

Najlepszym rozwiązaniem dla mnie była aktualizacja z node-mongodb 1.x do 2.x.

jczaplew
źródło
1

Zdaję sobie sprawę, że ten wątek ma ponad rok, ale pomógł mi, chociaż z innym modułem.

Zainstalowałem mongoose-post-findv0.0.2 i zaczął się ten problem. Aby to naprawić, skorzystałem z sugestii i przeszedłem do \ node_modules \ mongoose-post-find \ node_modules \ bson \ ext i otworzyłem plik index.js.

Plik zaczyna się od bloku try catch próbującego wymagać poprawnej wersji 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');
    }
}

to jest poprawiona wersja. To, co się działo, to próba załadowania bson z ../build/Release/bson, nie mogła go znaleźć i wpadła w pułapkę. Próbowano ponownie załadować bson z ../build/Release/bson i oczywiście nie powiodło się. Więc zmieniam ścieżkę w catch, aby spojrzeć na ../browser_build/bson. To rozwiązało błąd.

Publikuję to dla kompletności.

Paul Stoner
źródło
1

Miałem ten sam problem po aktualizacji wersji Ubuntu do 16.04. Rozwiązałem w ten sposób, mam nadzieję, że to pomoże.

$rm -rf node_modules
$npm --save install bson
$npm --save install mongoose
$npm install
Enrico Giurin
źródło
1

W naszym przypadku powodem, dla którego nie znaleziono wersji c ++ bson, było to, że byliśmy za korporacyjnym serwerem proxy i coś w procesie kompilacji BSON musi dotrzeć do pobrania plików. Kiedy zajrzeliśmy do node_modules / bson / builderror.log, zobaczyliśmy następujący błąd:

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)

Co sugerowało, że proxy może być problemem. Ustawienie zmiennych środowiskowych http_proxy i https_proxy rozwiązało problem.

Przepraszam za ponowne wzbudzenie komentarzy na ten temat, ale chciałem opublikować to dla każdego, kto trafi na to w przyszłości, ponieważ ten wątek był bardzo pomocny w rozwiązaniu naszego problemu.

Matt M.
źródło
0

Próbowałem zainstalować mongoose npm --msvs_version = 2012, jeśli masz zainstalowanych wiele Visual, zadziałało to dla mnie

AKID Ahmed
źródło
0

Pierwsza kopia bson.jskodu zbrowser_build folder

po drugie utwórz nowy plik bson.jsi wklej kod

po trzecie zapisz nowy plik w pobliżu w index.js.

rktel
źródło
0

Pracuję z systemem operacyjnym Windows 8.1 i miałem ten sam problem. Źródłem problemu była wersja Pythona. Znalazłem problem z pochodzeniem, przejrzyj plik ... \ node_modules \ mongodb \ node_modules \ mongodb-core \ node_modules \ kerberos \ builderror.log.

Zainstalowałem poprawną wersję Pythona (2.7.9 dla 64 bitów) i rozwiązało to mój problem.

Uwaga: Zainstalowana wersja języka Python musi być równa lub większa niż 2.7.5 i mniejsza niż 3.0.0

hbuenoc
źródło
0

Próbowałem, bson = require('../browser_build/bson');ale w końcu napotkałem inny błąd

Nie można ustawić właściwości „BSON_BINARY_SUBTYPE_DEFAULT” na wartość niezdefiniowaną

Wreszcie rozwiązałem ten problem po prostu npm update, naprawi to moduł bson w mongoose.

unclejimbo
źródło
0

Tak więc mam ten sam problem i zdarza się, że określony adres URL mongoDB nie istnieje. Aby to naprawić, musisz przejść do folderu „.. \ server \ config \ environment” i edytować w pliku „development.js” łącze do mongoDB.

Przykład:

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

  seedDB: true
};

Więc zmień to "uri: 'mongodb: // localhost / test2-dev'" na jakąś rzeczywistą ścieżkę do bazy danych mongoDB.

Będzie mi miło, jeśli mój post komuś pomoże ...

Vasilic Maxim
źródło
0

znajdź w module npm mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

i zmień ścieżkę na wersję js w bloku catch

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

do 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');
        }
    }
user3168528
źródło