Tidak dapat menemukan kode modul '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: Gagal memuat ekstensi c ++ bson, menggunakan versi JS murni


156

Saya mendapatkan kesalahan di bawah ini:

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

Inilah detail versi saya:

  • OS: Windows 7

  • MongoDB: 2.6.5

  • Node: 0.12.0

Saya sudah mencoba hal-hal ini sebelum saya memposting masalah di sini.

  1. Saya pergi ke \node-modules\mongoose\node-modules\mongodb\node-modules\bsonfolder dan membuat perubahan di bawah ini pada file gyp-mengikat dari 'include_dirs': [ '<!(node -e "require(\'nan\')")' ] ke 'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

  2. Jalankan perintah ini npm install -g node-gyp

  3. Saya telah memperbarui versi luwak ke 3.8.21 di dalamnya package.json

Tidak ada yang berhasil. Tolong sarankan


2
Saya telah mencoba opsi di bawah ini yang disarankan oleh Anda tetapi tidak berhasil. Saya mendapatkan kode kesalahan di bawah {[Kesalahan: Tidak dapat menemukan modul '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: Gagal memuat ekstensi c ++ bson, menggunakan versi JS murni c: \ raj \ project \ meandemo \ node_modules \ express \ lib \ router \ route.js: 170 throw new Error (msg); ^ Kesalahan: Route.get () memerlukan fungsi panggil balik tetapi mendapat [objek Tidak Terdefinisi] di Route. <anonymous>
navra


1
Silakan lihat solusi ini, semoga berhasil! Sebagai ekstensi C ++ BSON diperlukan untuk beberapa Modul lainnya juga. Harap dicatat bahwa, solusi ini khusus Untuk Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan

Periksa jawaban dalam pertanyaan ini juga: Gagal memuat ekstensi c ++ bson
totymedli

Kemungkinan rangkap dari Gagal memuat ekstensi c ++ bson
mido

Jawaban:


165

Temukan di modul npm mongodb:

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

Ubah jalur ke versi js di blok tangkap:

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

Untuk:

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

Atau salin file di:

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

Dari:

.. \ node_modules \ bson \ browser_build \ bson


1
Luar biasa! Lingkungan lokal, jadi tidak ada yang tragis yang seharusnya terjadi.
Manatax

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

25
Ini bukan solusi. Dengan hasil yang sama Anda hanya dapat menghapus string yang mencetak kesalahan. Kesalahan ini muncul karena plugin c ++ asli untuk bson tidak ditemukan dan dalam kasus ini realisasi js akan tetap digunakan.
Alendorff

4
@Alendorff Benar, tetapi itulah yang sebagian besar dari kita cari. Saya tidak peduli dengan plugin C ++, saya ingin menghilangkan peringatan karena mereka melanggar Inspektur Node. Dari perspektif ini, saran Anda (menghapus cetakan kesalahan) juga merupakan solusi, karena ini seharusnya tidak menjadi kesalahan, kode berfungsi dengan baik dengan fallback JS.
totymedli

3
Maaf, downvoting sebagai jawaban terbaik kedua di sini sebenarnya memiliki solusi non-hack yang tepat: Instal versi paket yang tidak rusak!
jrista

70

Saya memiliki masalah ini hari ini (19 Februari 2016) dan saya menyelesaikannya hanya dengan menginstal versi terbaru dari Mongoose. Coba letakkan ini di package.json Anda:

"mongoose": "~4.4"

Semoga itu bisa membantu. Memecahkannya untukku!


1
Bekerja untukku. Saya pikir itu semua masalah dengan versi luwak tua, yang saya dapatkan dari mengikuti tutorial lama. IMO ini harus menjadi jawaban yang benar.
Edward Newell

8
Jawaban terbaik, semua yang lain tentang mengedit kode dalam modul adalah peretasan bukan solusi
sepeda

2
Solusi paling lurus ke depan tanpa perlu dipusingkan dengan node_modules / mongodb dll. Terima kasih!
mikeym

1
Salah satu yang terbaik, cukup uninstall mongoose (npm uninstall mongoose) dan pasang kembali (npm instal luong)
Grijan

18

Masalahnya adalah ketika Anda menginstal luwak melalui npm itu mengasumsikan Anda memiliki python yang diinstal pada windows Anda dan mencoba untuk membangun perpustakaan yang diperlukan. Karena Anda tidak memiliki python, ia melompati fase pembangunan dengan peringatan. Tetapi ketika Anda memulai aplikasi Anda, modul yang diperlukan tidak ada sehingga Anda mendapatkan kesalahan ini.

Untuk melakukan hal-hal yang benar, instal python pertama (versi 2.7) di komputer Anda dari: https://www.python.org/downloads/ atau jika Anda telah menginstal chockolatey ketik saja choco install python2.

Kemudian pastikan variabel python Anda diatur. Anda dapat mengaturnya pada command prompt seperti:

SET python=D:\Python27\python.exe

(Tentu saja Anda harus mengubah path sesuai dengan lokasi python Anda) Kemudian instal node-gyp:

npm install -g node-gyp

Sekarang Anda dapat menginstal ulang luwak atau modul apa pun yang menyebabkan masalah:

npm install mongoose

Anda akan melihat beberapa garis kuning dan bukan yang merah kali ini tetapi kesalahannya akan hilang.


2
Versi python penting. node-gyp tidak berfungsi dengan versi> 3.0
MatthieuLemoine

1
Ini bukan solusi lengkap ... Saya masih mendapatkan kesalahan berikut: MSBUILD: error MSB3428: Tidak dapat memuat komponen Visual C ++ "VCBuild.exe".
orszaczky

@TheRebel Ini mengasumsikan toolchain vs2010. Tambah --msvs-version=2012atau 2013etergantung pada apa yang telah Anda instal. misalnyanpm install mongoose --msvs-version=2012
RichieRich

apa yang harus saya lakukan jika saya menggunakan aplikasi node di cloud heroku.
jsbisht

15

Saya mengatasi masalah ini dengan menginstal versi mogoose 3.8.23

npm install mongoose@3.8.23

bekerja di sini. apakah ini versi yang lebih lama? mengapa itu berhasil?
Victor Ferreira

15

Ini berhasil untuk saya. Cari di ruang kerja Anda untuk teks:

"../build/Release/bson"

Anda mungkin akan menemukannya di dalam modul luwak dan biarawan.

Kemudian ganti masing-masing:

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

dengan:

bson = require('bson');

itu saja!


Saya mendapatkan kesalahan ini mencoba menjalankan tes standar setelah menyiapkan proyek menggunakan meanjs. Ini memperbaikinya. Terima kasih.
RaneWrites

7

Coba npm install mongoose@3.8.23dan ganti bson = require('../build/Release/bson');ke

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


Pastikan path ke bson.js benar. Bagi saya bson = membutuhkan ('../ browser_build / bson.js'); bekerja. Juga periksa versi luwak sebelum pergi untuk instalasi.
Vikram Shetty

7

Ini bekerja untuk saya:

Buka file (dalam proyek Anda):

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

dan ubah:

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

untuk:

bson = require('bson');

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


2
Bagaimana cara Anda memperbaiki ini bertahan? Apakah Anda memeriksa node_modulesdirektori Anda ke dalam kontrol sumber?
Mark Stosberg

7

Jawaban singkat

Instal mongodb versi terbaru.

Jawaban yang sedikit lebih panjang

Pastikan package.json Anda menggunakan mongodb versi terbaru, lalu hapus node_modules / mongodb dan lakukan npm install lagi. Jika Anda tidak menggunakan mongodb sebagai ketergantungan langsung, cobalah untuk menemukan paket mana yang menggunakan mongdb. Saya menggunakan:

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

Jadi saya memperbarui ./sails-mongo/package.json ke:

"mongodb": "2.1.7",

Kemudian hapus node_modules / mongodb dan lakukan instalasi npm lagi. Tampak baik-baik saja sekarang.

Jawaban yang lebih panjang

Saya tidak suka cara penggunaan yang disarankan saat ini

require('../browser_build/bson')

Sejak melihat ../browser_build/bson.js, file 4k + lines, yang tampaknya juga merupakan implementasi "non-pribumi". Jadi meskipun tidak akan mengeluarkan keluhan, masih "menggunakan versi JS murni", yang berarti kinerja lebih lambat.

Melihat https://github.com/mongodb/js-bson/issues/145 dan https://github.com/mongodb/js-bson/issues/165 , sepertinya masalah ini disebabkan oleh:

antoniofruci mengomentari 15 Sep 2015

Saya baru tahu bahwa kode c ++ telah dipindahkan 6 bulan yang lalu dan sekarang menjadi ketergantungan opsional: bson-ext. Memang, jika Anda menginstal versi terbaru tidak ada kesalahan terjadi.

Jadi saya mencoba untuk menghapus seluruh node_modules dan masih mendapat kesalahan yang sama. Dan melihat package.json dari node_modules / mongodb, versinya masih 1.4.26, bukan terbaru 2.1.7.

Rupanya mongodb saya datang sebagai ketergantungan dari paket lain yang saya instal: sails-mongo. Memodifikasi package.json dari layar-mongo dan mengulangi instalasi npm akhirnya menyelesaikan masalah.


6

Menyebarkan Keystone JS CMS Saya memiliki kesalahan yang sama dan saya pikir solusi paling elegan adalah ini:

Pasang npm-check-updates:

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

Di dalam direktori situs keystone Anda, di mana package.jsonditempatkan, periksa dependensi:

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

Kemudian perbarui semua paket:

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

Dan akhirnya jika Anda memilih jadeuntuk templat, mungkin Anda perlu menginstal jademodul secara eksplisit:

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

5

Jawaban yang ditandai benar-benar salah. Yang perlu dilakukan hanyalah menyembunyikan pernyataan log konsol dan tidak melakukan apa pun untuk mengatasi masalah sebenarnya. Anda juga bisa menutup mata dan hasilnya akan sama.

Masalahnya disebabkan oleh node-gyp dan hanya itu. Tujuannya adalah untuk mengkompilasi ekstensi asli untuk modul tertentu seperti bson.

Jika gagal melakukannya maka kode akan mundur ke versi JS dan dengan ramah memberi tahu Anda melalui pesan informatif:

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

Saya berasumsi pertanyaannya adalah benar-benar tentang bagaimana mengkompilasi ekstensi C ++ asli bukan hanya tidak melihat pesan jadi mari kita alamatkan itu.

Agar simpul-gyp berfungsi, simpul-gyp Anda harus mutakhir dengan simpul dan kompiler C ++ (yang akan berbeda berdasarkan OS Anda). Sama pentingnya modul Anda juga harus up to date.

Pertama uninstall dan instal ulang node-gyp

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

Sekarang Anda harus mencopot dan memasang kembali modul node apa pun di aplikasi Anda (yang mencakup modul yang diinstal oleh persyaratan juga) yang memiliki bson. Itu harus mengatasi kesalahan. Anda dapat mencari 'Lepaskan / bson' dan temukan penyebabnya.

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

Dan kemudian hapus dan instal kembali modul-modul ini.

Lebih mudah untuk hanya mengulang seluruh node_modulesfolder:

 rm -rf node_modules
 npm cache clear
 npm i

Jika Anda masih mengalami masalah maka 1) modul Anda sudah kedaluwarsa - periksa pelacak masalah di repo mereka atau 2) Anda memiliki potensi konflik - kadang-kadang kita mungkin memiliki simpul-gip lokal misalnya. Anda dapat menjalankannya node-gypsendiri dan memverifikasi versi.


5

Saat membuat pengaturan untuk www.spotdekho.comdi windows10mesin baru , saya tidak dapat menjalankan perintah "nodemon web.js" karena kesalahan yang sama

"Kesalahan: Tidak dapat menemukan modul '../build/Release/bson'"

Perbaiki dengan langkah-langkah di bawah ini:

  1. Buat folder "Lepaskan" di dalam lokasi "node_modules \ bson \ build \"
  2. Salin bson.js dari "node_modules \ bson \ browser_build \"
  3. Rekatkan bson.js di dalam folder "node_modules \ bson \ build \ Release".

Ini akan menyelesaikan masalah.

PS: Saya menggunakan luwak versi 4.8.8.

Terima kasih :), semoga membantu seseorang.


4

Dalam kasus saya, bit yang datang dengan luwak ( npm install mongoose) memiliki versi mongodbpaket yang berfungsi di node_modulesfoldernya.

Langkah-langkah berikut ini menyelamatkan saya dari pemecahan masalah:

  • npm install mongoose
  • salin node_modules\mongoose\node_modules\mongodbke node_modulesfolder root saya (menimpa versi apa pun yang datang dengan npm install mongodb)
  • abaikan Failed to load c++ bson extension...kesalahan (atau ubah kode untuk tidak membahas masalah)

3

Ketika saya mendapatkan kesalahan seperti ini, saya memutakhirkan dari simpul v0.10 ke simpul v4.xx. Apa yang harus saya lakukan adalah menginstal versi gcc yang lebih baru (saya pikir saya punya gcc v4.4.x atau sesuatu). Saya memperbarui ke gcc 4.7.2 dan hal-hal berhasil setelah itu.


3

Saya juga punya masalah yang sama dengan bson.

mencoba versi luwak yang lebih baru

npm install mongoose@4.4

memecahkan masalah.

Massimo.


3

Jalankan perintah ini untuk menghapus instalan luwak npm uninstall --save mongoose- setelah itu instal ulang tetapi kali ini npmsecara otomatis menginstal versi terbaru luwak menjalankan npm install --save mongooseIni bekerja untuk saya.


2

Sayangnya, Semua jawaban di atas hanya setengah benar .. Butuh waktu lama untuk mencari tahu ini ..

Bo luoose instal via npm melempar peringatan dan menyebabkan kesalahan ...

npm install -g node-gyp

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

Ini bekerja seperti sihir !!


2

Jika Anda menggunakan windows 8.1, Anda mungkin ingin memastikan bahwa Anda memasang modul npm Anda dengan kompiler studio visual yang benar.

Saya telah menginstal Visual Studio 2012, perintah ini berfungsi untuk saya. (setelah menghapus dir node_modules)

npm instal --msvs_version = 2012

Untuk beberapa alasan, node-gyp sedang mencoba menggunakan versi yang tidak tepat dari kompiler Visual Studio. Saya juga memperhatikan bahwa perintah "npm install" sedang mencetak peringatan tentang bukan dependensi node-gyp ketika menginstal modul mongodb dan luwak.

Setelah menggunakan msvs_version yang benar, peringatan instalasi npm hilang dan juga peringatan konsol saat menjalankan aplikasi nodejs saya.

Anda mungkin juga ingin memastikan bahwa Anda menginstal versi Python 2.7.X yang benar dan bukan Python 3.0.X.

Anda juga perlu memastikan bahwa python ada di jalur env Anda.


Ini bekerja untuk saya di Windows 8.1 dengan Visual Studio Community Edition 2013 menggunakannpm install --msvs_version=2012
phocks

2

Satu-satunya hal yang membantu saya di Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Instal ulang node dan python dengan versi x32.
Saya menghabiskan banyak waktu dengan kesalahan ini (Gagal memuat ekstensi c ++ bson) dan akhirnya, ketika saya menginstal modul node-gyp(untuk membangun addons asli) dan bahkan menginstal windows SDK dengan visual studio - nodejs tidak mengenali modul bson.node yang dirakit sebagai modul. Setelah menginstal ulang masalah hilang.

Lagi, Apa artinya kesalahan ini?

Sebenarnya, itu bahkan bukan kesalahan. Anda masih bisa menggunakan luwak. Tetapi dalam kasus ini, alih-alih realisasi cepat asli dari modul bson, Anda mendapatkan realisasi js, yang lebih lambat. Saya melihat banyak tips seperti: "edit path jauh di dalam node_modules ..." - yang sama sekali tidak berguna karena itu tidak menyelesaikan masalah tetapi hanya mematikan pesan kesalahan.



1

Anda tidak boleh mengubah file di folder perpustakaan NODE_MODULES.

File-file itu adalah hasil dari npm install perintah.

Pada dasarnya, saya pikir untuk pengguna Windows - cara yang benar adalah menggunakan VM. Itu yang saya lakukan ketika saya bekerja dari rumah.

Semua yang Anda butuhkan:

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

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

dan kemudian npm installatau, jika Anda sudah melakukannya -npm update


Dia mengatakan tepat di pertanyaan dia menggunakan Windows 7 - bagaimana perintah CentOS dan Debian membantu?
Thronk

1
Oh, sungguh, salahku. Saya tidak melihat tanda itu
Victor Perov

1

Solusi terbaik bagi saya adalah meningkatkan dari node-mongodb 1.x ke 2.x.


1

Saya menyadari bahwa utas ini berumur 1 tahun ke atas, tetapi itu membantu saya, meskipun dengan modul yang berbeda.

Saya menginstal luwak-post-findv0.0.2 dan masalah ini dimulai. Untuk memperbaikinya, saya menggunakan saran dan menavigasi ke \ node_modules \ mongoose-post-find \ node_modules \ bson \ ext dan membuka file index.js.

File dimulai dengan blok coba-coba yang mencoba meminta versi bson yang benar

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');
    }
}

ini adalah versi yang diperbaiki. Apa yang terjadi adalah ia mencoba memuat bson dari ../build/Release/bson, tidak dapat menemukannya dan jatuh ke tangkapan. Ada yang mencoba memuat bson lagi dari ../build/Release/bson dan tentu saja gagal. Jadi saya mengubah jalur di tangkapan untuk melihat ../browser_build/bson. Ini menyelesaikan kesalahan.

Saya memposting ini untuk kelengkapan.


1

Saya memiliki masalah yang sama setelah memutakhirkan versi ubuntu ke 16.04. Saya memecahkan dengan cara ini, semoga membantu.

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

1

Dalam kasus kami, alasan bahwa versi c ++ bson tidak ditemukan adalah karena kami berada di belakang proxy perusahaan dan sesuatu dalam proses pembuatan BSON perlu menjangkau untuk mengambil file. Ketika kami melihat di node_modules / bson / builderror.log, kami melihat kesalahan seperti ini:

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)

Yang menyarankan bahwa proxy mungkin menjadi masalah. Mengatur variabel lingkungan http_proxy dan https_proxy menyelesaikannya.

Maaf telah membangkitkan kembali komentar tentang ini, tetapi saya ingin memposting ini untuk orang lain yang mengenai ini di masa depan karena utas ini sangat membantu dalam menyelesaikan masalah kami.


0

Mencoba npm instal luong --msvs_version = 2012, jika Anda memiliki beberapa Visual yang diinstal, itu berhasil untuk saya


0

Pertama copy bson.jskode daribrowser_build folder

kedua buat file baru bson.jsdan tempel kode

ketiga simpan file baru di dekat dalam index.js.


0

Saya bekerja dengan OS Windows 8.1 dan saya memiliki masalah yang sama. Sumber masalahnya adalah versi Python. Saya menemukan masalah asal meninjau file ... \ node_modules \ mongodb \ node_modules \ mongodb-core \ node_modules \ kerberos \ builderror.log.

Saya menginstal versi Python yang benar (2.7.9 untuk 64 bit) dan itu menyelesaikan masalah saya.

Catatan: Versi python yang dipasang harus sama atau lebih besar dari 2.7.5 dan kurang dari 3.0.0


0

Saya sudah mencoba bson = require('../browser_build/bson');tetapi akhirnya mengalami kesalahan lain

Tidak dapat menetapkan properti 'BSON_BINARY_SUBTYPE_DEFAULT' dari undefined

Akhirnya saya memperbaiki masalah ini hanya dengan npm update, ini akan memperbaiki modul bson di luwak.


0

Jadi, saya memiliki masalah yang sama dan itu terjadi maka URL mongoDB yang ditentukan tidak ada. Jadi, untuk memperbaikinya, Anda harus membuka folder ".. \ server \ config \ environment" dan mengedit file "development.js" di tautan ke mongoDB.

Contoh:

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

  seedDB: true
};

Jadi, ubah "uri: 'mongodb: // localhost / test2-dev'" menjadi beberapa jalur nyata ke database mongoDB Anda.

Saya akan senang jika posting saya akan membantu seseorang ...


0

temukan di modul npm mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

dan ubah path ke versi js di catch block

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

untuk 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');
        }
    }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.