Неможливо знайти код модуля '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: не вдалося завантажити розширення c ++ bson, використовуючи чисту версію JS


156

Я отримую помилку нижче:

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

Ось моя детальна версія:

  • ОС: Windows 7

  • MongoDB: 2.6.5

  • Вузол: 0,12.0

Я випробував ці речі, перш ніж опублікував випуск тут.

  1. Я перейшов у \node-modules\mongoose\node-modules\mongodb\node-modules\bsonпапку і вніс зміни в файлі прив'язки-gyp з 'include_dirs': [ '<!(node -e "require(\'nan\')")' ] на 'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

  2. Виконати цю команду npm install -g node-gyp

  3. Я оновив версію мангуста до 3.8.21 всередині package.json

Нічого не працює. Будь ласка, підкажіть


2
Я спробував нижче запропоновані вами варіанти, але безрезультатно. Я отримую нижче помилку {[Помилка: Не вдалося знайти модуль '../build/Release/bson'] код: 'MODULE_NOT_FOUND'} js-bson: Не вдалося завантажити розширення c ++ bson, використовуючи чисту версію JS c: \ raj \ project \ meandemo \ node_modules \ express \ lib \ router \ route.js: 170 кинути нову помилку (msg); ^ Помилка: Route.get () вимагає функцій зворотного виклику, але отримав [об’єкт не визначено] в маршруті. <anonymous>
navra


1
Будь ласка, дивіться це рішення, сподіваємось, воно працює! Оскільки розширення C ++ BSON також потрібно для декількох інших Модулів. Будь ласка, зауважте, що це рішення є специфічним для Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan

Перевірте відповіді і в цьому питанні: Не вдалося завантажити c ++ розширення
bson

Відповіді:


165

Знайти в npm-модулі mongodb:

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

Зміна шляху до версії js у блоці улов:

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

До:

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

Або скопіюйте файл у:

.. \ node_modules \ bson \ build \ Випуск \ bson

Від:

.. \ node_modules \ bson \ browser_build \ bson


1
Дивовижно! Місцеве середовище, однак, так нічого трагічного не повинно статися.
Манатакс

4
bson = вимагати ('../../../ browser_build / bson.js');
robor78

25
Це не рішення. З тим же результатом ви можете просто видалити рядки, які друкують помилку. Ця помилка з'являється через те, що вбудований плагін c ++ для bson не знайдено, і в цьому випадку реалізація js все одно буде використана.
Алендорф

4
@Alendorff Щоправда, але саме це шукає більшість із нас. Мене не хвилює плагін C ++, я хочу позбутися попереджень, оскільки вони порушують Node Inspector. З цієї точки зору, ваша пропозиція (видалення відбитків помилок) також є рішенням, оскільки це не повинно бути помилкою, код працює чудово із запасом JS.
totymedli

3
Вибачте, що другий найкращий відповідь тут насправді має правильне, нерухливе рішення: Встановіть несправну версію пакета!
jrista

70

У мене виникла ця проблема сьогодні (19 лютого 2016 року), і я вирішив її, просто встановивши останню версію Mongoose. Спробуйте помістити це у пакунок.json:

"mongoose": "~4.4"

Сподіваюся, що це допомагає. Вирішили це за мене!


1
Працювали для мене. Я думаю, що це вся проблема зі старою версією мангуста, яку я мав після виконання старого підручника. ІМО це має бути правильною відповіддю.
Едвард Ньюелл

8
Найкраща відповідь, всі інші, що стосуються редагування коду в модулях, - хаки, а не рішення
велосипед

2
Найбільш прямо рішення вперед без необхідності возитися з node_modules / mongodb тощо. Дякую!
mikeym

1
Один з найкращих, просто видаліть мангусту (npm uninstall mongoose) та встановіть її знову (npm install mongoose)
Гріан,

18

Проблема полягає в тому, що при встановленні мангуста через npm він передбачає, що на ваших Windows встановлений python та намагається створити необхідні бібліотеки. Оскільки у вас немає пітона, він пропускає етап будівництва з попередженням. Але коли ви запускаєте свою програму, потрібних модулів немає, тому ви отримуєте цю помилку.

Щоб зробити все правильно, спочатку встановіть на свій комп’ютер python (версія 2.7) з: https://www.python.org/downloads/ або якщо у вас встановлено chockolatey, просто введіть choco install python2.

Потім переконайтеся, що ваша змінна python встановлена. Ви можете встановити його в командному рядку, наприклад:

SET python=D:\Python27\python.exe

(Звичайно, слід змінити шлях відповідно до вашого місцезнаходження python) Потім встановіть node-gyp:

npm install -g node-gyp

Тепер ви можете перевстановити мангуст або будь-який модуль, що спричинить проблему:

npm install mongoose

Цього разу ви побачите кілька жовтих ліній замість червоних, але помилка не буде.


2
Важлива версія пітона. node-gyp не працює з версією> 3.0
MatthieuLemoine

1
Це не повне рішення ... Я все ще отримую таку помилку: MSBUILD: помилка MSB3428: Не вдалося завантажити компонент Visual C ++ "VCBuild.exe".
orszaczky

@TheRebel Це передбачає, що інструментальний ланцюг vs2010. Додайте --msvs-version=2012або 2013eзалежно від того, що ви встановили. наприкладnpm install mongoose --msvs-version=2012
RichieRich

що робити, якщо я розгортаю додаток для вузла на хмарі heroku.
jsbisht


15

Це працювало для мене. Шукайте текст у робочій області:

"../build/Release/bson"

Ви, мабуть, знайдете його всередині модулів монгоза та монаха.

Потім замініть кожен:

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

з:

bson = require('bson');

це все!


Я отримував цю помилку, намагаючись запустити тести за замовчуванням після налаштування проекту за допомогою meanjs. Це і виправило. Дякую.
RaneWrites

7

Спробуйте npm install mongoose@3.8.23також замінити bson = require('../build/Release/bson');на

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


Переконайтесь, що шлях до bson.js правильний. Для мене bson = requ ('../ browser_build / bson.js'); працювали. Також перевірте версію мангуста, перш ніж перейти до встановлення.
Вікрам Шетті

7

Це працювало для мене:

Перейдіть до файлу (у вашому проекті):

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

і змінити:

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

до:

bson = require('bson');

Довідка: https://github.com/mongodb/js-bson/isissue/118


2
Як у вас виправдалося це виправлення? Ви перевірили у своєму node_modulesкаталозі джерело контролю?
Марк Стосберг

7

Коротка відповідь

Встановіть останню версію mongodb.

Трохи довша відповідь

Переконайтеся, що ваш package.json використовує останню версію mongodb, а потім видаліть node_modules / mongodb та зробіть npm встановити знову. Якщо ви не використовували mongodb як пряму залежність, спробуйте знайти, який пакет використовує mongdb. Я використав:

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

Тому я оновив ./sails-mongo/package.json на:

"mongodb": "2.1.7",

Потім вийміть node_modules / mongodb і зробіть npm встановити знову. Зараз здається нормально.

Ще довша відповідь

Мені не подобається поточний запропонований спосіб використання

require('../browser_build/bson')

З огляду на ../browser_build/bson.js, файл із форматом 4k + рядків, який здається також "неродньою" реалізацією. Тож він не викличе жодних скарг, він все ще "використовує чисту версію JS", що означає більш низьку продуктивність.

Дивлячись на https://github.com/mongodb/js-bson/isissue/145 та https://github.com/mongodb/js-bson/isissue/165 , схоже, проблему спричинили:

antoniofruci прокоментував 15 вересня 2015 року

Щойно я з’ясував, що код c ++ було вилучено 6 місяців тому і тепер він є необов'язковою залежністю: bson-ext. Дійсно, якщо встановити останню версію, помилки не виникає.

Тому я спробував видалити цілі модулі node_ і все-таки отримав ту саму помилку. І дивлячись на package.json з node_modules / mongodb, його версія все ще 1.4.26, не остання 2.1.7.

Мабуть, мій mongodb є залежністю від іншого встановленого мною пакету: sails-mongo. Змінення package.json sails-mongo та повторне встановлення npm встановлюють нарешті проблему.


6

Розгортання Keystone JS CMS У мене була така ж помилка, і я думаю, що найелегантніше рішення це:

Встановити npm-check-updates:

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

У вашому каталозі ключових сайтів, де package.jsonрозміщено, перевірте залежності:

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

Потім оновіть усі пакети:

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

І нарешті, якщо ви вибрали jadeдля шаблонів, можливо, вам знадобиться jadeявно встановити модуль:

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

5

Позначена відповідь абсолютно неправильна. Все, що потрібно зробити, це приховати консоль журналу консолі і нічого не робить, щоб вирішити проблему. Ви також можете закрити очі, і це дозволить досягти такого ж результату.

Проблема викликана node-gyp і тільки це. Його мета - компілювати вбудовані розширення для певних модулів, таких як bson.

Якщо це не вдається зробити це , то код буде Відкат до версії JS і люб'язно повідомить Вам про це через інформаційне повідомлення:

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

Я припускаю, що питання справді полягає в тому, як скласти нативне розширення C ++, а не просто не бачити повідомлення, тому давайте вирішимо це.

Для того, щоб node-gyp працював, ваш node-gyp повинен бути в курсі вашого вузла та компілятора C ++ (що відрізнятиметься від вашої ОС). Не менш важливо, щоб ваш модуль також був оновлений.

Спочатку видаліть та перевстановіть node-gyp

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

Тепер вам потрібно буде повністю видалити та перевстановити будь-який модуль вузла у вашому додатку (який включає також модулі, встановлені відповідно до вимог), які мають bson. Це повинно піклуватися про помилку. Ви можете шукати "Release / bson" та знаходити винуватців.

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

А потім видаліть та перевстановіть ці модулі.

Простіше просто переробити всю node_modulesпапку:

 rm -rf node_modules
 npm cache clear
 npm i

Якщо у вас все ще виникають проблеми, то будь-який 1) ваш модуль застарів - перевірте трекер випуску в їхньому репо або 2) у вас є потенційний конфлікт - іноді у нас може бути локальний вузол-гіп, наприклад. Ви можете запустити node-gypсам і перевірити версії.


5

Під час створення налаштування для www.spotdekho.comнової windows10машини мені не вдалося запустити команду "nodemon web.js" через ту саму помилку

"Помилка. Неможливо знайти модуль '../build/Release/bson'"

Визначено за допомогою наступних кроків:

  1. Створіть папку "Випустити" всередині "node_modules \ bson \ build \"
  2. Скопіюйте bson.js з "node_modules \ bson \ browser_build \"
  3. Вставте bson.js всередину папки "node_modules \ bson \ build \ Release".

Це вирішить проблему.

PS: Я використовую мангусту версії 4.8.8.

Дякую :), сподіваюся, що це комусь допоможе.


4

У моєму випадку біти, які постачаються з мангустом ( npm install mongoose), мають в своєму розпорядженні робочу версію mongodbпакетаnode_modules папці.

Наступні кроки врятували мені роботу з усунення проблеми:

  • npm install mongoose
  • скопіюйте node_modules\mongoose\node_modules\mongodbв мою кореневу node_modulesпапку (перезапис будь-якої версії, що постачається разом npm install mongodb)
  • ігноруйте Failed to load c++ bson extension...помилку (або змініть код, щоб мовчати з питання)

3

Коли я отримував подібні помилки, я переходив від вузла v0.10 до вузла v4.xx. Що мені потрібно було зробити, це встановити нову версію gcc (я думаю, у мене був gcc v4.4.x чи щось таке). Я оновив до gcc 4.7.2, і все працювало після цього.


3

У мене також була така ж проблема з bson.

спробуйте новішу версію мангуста

npm install mongoose@4.4

вирішив питання.

Массімо.


3

Запустіть цю команду для видалення мангусти npm uninstall --save mongoose- після цього перевстановіть її, але цього разу npmавтоматично встановіть останню версію запуску мангусти. npm install --save mongooseЦе працювало для мене.


2

На жаль, всі вищезазначені відповіді лише наполовину вірні .. Знадобилося довго розібратися в цьому ..

Установка мангуста bson через npm кидає попередження і викликає помилку ...

npm install -g node-gyp

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

Це працює як магія !!


2

Якщо ви використовуєте Windows 8.1, ви можете переконатися, що ви встановлюєте npm-модулі за допомогою правильного компілятора візуальної студії.

У мене встановлена ​​Visual Studio 2012, ця команда працює для мене. (після видалення node_modules dir)

npm install --msvs_version = 2012

Чомусь node-gyp намагається використовувати неправильну версію компілятора Visual Studio. Я також помітив, що команда "npm install" друкувала попередження про не node-gyp залежності при встановленні модулів mongodb та mongoose.

Після використання правильної msvs_version попередження про встановлення npm вимкнулося, а також попередження консолі під час запуску мого додатка nodejs.

Ви також можете переконатися, що у вас встановлена ​​правильна версія Python 2.7.X, а не Python 3.0.X.

Вам також потрібно буде переконатися, що python знаходиться у вашому шляху env.


Це працювало для мене в Windows 8.1 з Visual Studio Community Edition 2013, використовуючиnpm install --msvs_version=2012
фотки

2

Єдине, що мені допомагає у Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Перевстановіть вузол та пітон з версіями x32.
Я витратив багато часу з цією помилкою (не вдалося завантажити розширення c ++ bson) і, нарешті, коли я встановив модуль node-gyp(для побудови власних аддонів) і навіть встановив Windows SDK з візуальною студією - nodejs не визнав зібраний модуль bson.node як модуль. Після перевстановлення проблема відсутня.

Знову ж таки, що означає цю помилку?

Власне, це навіть не помилка. Ви все одно можете використовувати мангуст. Але в цьому випадку замість швидкої нативної реалізації модуля bson ви отримали js-реалізацію, яка повільніше. Я побачив багато порад, таких як: "редагувати шлях глибоко всередині node_modules ..." - що марно, оскільки це не вирішує проблему, а просто вимкнуло повідомлення про помилки.



1

Ніколи не слід змінювати файли в папці бібліотеки NODE_MODULES.

Ці файли є результатом npm installкоманди.

В основному, я думаю, що для користувачів Windows - правильним способом є використання VM. Це я роблю, коли працюю вдома.

Все, що вам потрібно:

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

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

а потім npm installабо, якщо ви вже це зробили -npm update


Він каже правильно у питанні, яким він користується Windows 7 - як допомагають команди CentOS та Debian?
Thronk

1
О, справді, моя погана. Я не бачив цього тега
Віктор Перов

1

Найкращим рішенням для мене було оновлення з node-mongodb 1.x до 2.x.


1

Я усвідомлюю, що цій темі 1 рік +, але це допомогло мені, хоча і з іншим модулем.

Я встановив mongoose-post-findv0.0.2, і ця проблема почалася. Щоб виправити це, я використав пропозиції та перейшов до \ node_modules \ mongoose-post-find \ node_modules \ bson \ ext та відкрив файл index.js.

Файл починається з блоку спробу вловлювання, який намагається вимагати правильної версії 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');
    }
}

це виправлена ​​версія. Що сталося, це спробувати завантажити bson з ../build/Release/bson, не вдалося його знайти і потрапив у лов. Там намагаються знову завантажити bson з ../build/Release/bson і, звичайно, не вдалося. Тож я змінюю шлях у вилозі, щоб переглянути ../browser_build/bson. Це вирішило помилку.

Я публікую це для повноти.


1

У мене була така ж проблема після оновлення версії ubuntu до 16.04. Я вирішив таким чином, сподіваюся, що це допомагає.

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

1

У нашому випадку причиною того, що версію c ++ bson не було знайдено, було те, що ми стояли за корпоративним проксі, і щось у процесі збирання BSON потребує пошуку файлів. Переглянувши node_modules / bson / builderror.log, ми побачили помилку на зразок такої:

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)

Що припустило, що проксі може бути проблемою. Встановлення змінних середовищ http_proxy та https_proxy вирішило це.

Вибачте за повторне пробудження коментарів з цього приводу, але я хотів опублікувати це для всіх, хто звернеться до цього в майбутньому, оскільки ця тема була дуже корисною для вирішення нашої проблеми.


0

Пробував npm install mongoose --msvs_version = 2012, якщо у вас встановлено кілька Visual, це працювало для мене


0

Першийbson.js код копії зbrowser_build folder

по-друге, створити новий файл bson.jsі вставити код

по-третє, збережіть новий файл поблизу в index.js.


0

Я працюю з ОС Windows 8.1, і у мене була така ж проблема. Джерелом проблеми стала версія Python. Я знайшов проблему з початком перегляду файлу ... \ node_modules \ mongodb \ node_modules \ mongodb-core \ node_modules \ kerberos \ builderror.log.

Я встановив правильну версію Python (2.7.9 на 64 біт) і це вирішило мою проблему.

Примітка. Встановлена ​​версія python повинна бути рівною або більшою ніж 2.7.5 та менше 3.0.0


0

Я намагався, bson = require('../browser_build/bson');але в кінцевому підсумку зіткнувся з іншою помилкою

Неможливо встановити властивість "BSON_BINARY_SUBTYPE_DEFAULT" з невизначеного

Нарешті я вирішив цю проблему просто npm update, це виправить модуль bson в мангусті.


0

Отже, у мене така ж проблема, і це трапляється, тоді вказана URL-адреса mongoDB не існує. Отже, для виправлення цього потрібно зайти в папку ".. \ server \ config \ environment" і відредагувати у файлі "development.js" посилання на mongoDB.

Приклад:

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

  seedDB: true
};

Отже, змініть цей "uri: 'mongodb: // localhost / test2-dev" "на якийсь реальний шлях до вашої бази даних mongoDB.

Я буду радий, якщо мій пост комусь допоможе ...


0

знайти в модулі npm mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

і змінити шлях до js версії в блоці 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');
        }
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.