Не удается найти модуль '../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

Ничего не работает Пожалуйста, предложите

navra
источник
2
Я попробовал ниже варианты, предложенные вами, но безрезультатно. Я получаю приведенную ниже ошибку {[Ошибка: не удается найти модуль '../build/Release/bson'] код: 'MODULE_NOT_FOUND'} js-bson: Не удалось загрузить расширение c ++ bson, используя чистую версию JS c: \ raj \ project \ meandemo \ node_modules \ express \ lib \ router \ route.js: 170 throw new Error (msg); ^ Ошибка: Route.get () требует функции обратного вызова, но получил [объект Undefined] в Route. <Анонимный>
navra
1
Пожалуйста, посмотрите это решение, надеюсь, оно работает! Как и C ++, расширение BSON необходимо и для нескольких других модулей. Пожалуйста, обратите внимание, что это решение специально для Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan
Проверьте ответы и в этом вопросе: не удалось загрузить расширение
bson

Ответы:

165

Найдите в модуле npm mongodb:

.. \ node_modules \ MongoDB \ node_modules \ BSON \ вн \ index.js

Измените путь к js-версии в блоке catch:

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

Для того, чтобы:

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

Или скопируйте файл в:

.. \ node_modules \ BSON \ сборка \ Release \ BSON

Из:

.. \ node_modules \ BSON \ browser_build \ BSON

anydasa
источник
1
Потрясающие! Местная среда, тем не менее, ничего трагического не должно произойти в любом случае.
Манатакс
4
bson = require ('../../../ browser_build / bson.js');
robor78
25
Это не решение. С тем же результатом вы можете просто удалить строки, которые выводит ошибку. Эта ошибка появляется из-за того, что родной плагин c ++ для bson не найден, и в этом случае реализация js будет использоваться в любом случае.
Алендорф
4
@Alendorff Правда, но это то, что большинство из нас ищут. Мне плевать на плагин C ++, я хочу избавиться от предупреждений, потому что они ломают Node Inspector. С этой точки зрения ваше предложение (удаление отпечатков ошибок) также является решением, потому что это не должно быть ошибкой, код прекрасно работает с резервной версией JS.
тотемедли
3
Извините, голосование вторым лучшим ответом здесь на самом деле имеет правильное, не взломанное решение: установите исправленную версию пакета!
jrista
70

У меня была эта проблема сегодня (19 февраля 2016 г.), и я решил ее, просто установив последнюю версию Mongoose. Попробуйте поместить это в свой package.json:

"mongoose": "~4.4"

Надеюсь, это поможет. Решил это для меня!

Мэтт Вест
источник
1
Работал на меня. Я думаю, что это все проблема со старой версией мангусты, которая возникла после изучения старого урока. ИМО это должен быть правильный ответ.
Эдвард Ньюэлл
8
Лучший ответ, все остальные о редактировании кода внутри модулей - это хаки, а не решения
велосипед
2
Самое простое решение без необходимости связываться с node_modules / mongodb и т. Д. Спасибо!
Микейм
1
Один из лучших, просто удалите mongoose (npm uninstall mongoose) и переустановите его снова (npm install mongoose)
Grijan
18

Проблема в том, что когда вы устанавливаете mongoose через npm, он предполагает, что у вас установлен python на ваших окнах, и пытается собрать необходимые библиотеки. Поскольку у вас нет 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

Теперь вы можете переустановить mongoose или любой другой модуль, вызывающий проблему:

npm install mongoose

На этот раз вы увидите несколько желтых линий вместо красных, но ошибка исчезнет.

salihcenap
источник
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.
января
15

Я решил эту проблему, установив версию Mogoose 3.8.23

npm install mongoose@3.8.23
Ришабх Гарг
источник
работал здесь. это старая версия? почему это работает?
Виктор Феррейра
15

Это сработало для меня. Поиск в вашей рабочей области для текста:

"../build/Release/bson"

Вы, вероятно, найдете его внутри модулей mongose ​​и monk.

Затем замените каждый:

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

с участием:

bson = require('bson');

вот и все!

kahlal
источник
Я получал эту ошибку, пытаясь запустить тесты по умолчанию после настройки проекта с помощью 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 = require ('../ browser_build / bson.js'); работал. Также проверьте версию mongoose перед переходом на установку.
Викрам Шетти
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/issues/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 install. Кажется, хорошо сейчас.

Еще дольше отвечу

Мне не нравится текущий предложенный способ использования

require('../browser_build/bson')

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

Глядя на https://github.com/mongodb/js-bson/issues/145 и https://github.com/mongodb/js-bson/issues/165 , кажется, что проблема была вызвана:

antoniofruci прокомментировал 15 сентября 2015

Я только что узнал, что код c ++ был удален 6 месяцев назад, и теперь это необязательная зависимость: bson-ext. Действительно, если вы устанавливаете последнюю версию, ошибки не возникает.

Поэтому я попытался удалить весь node_modules и все еще получил ту же ошибку. И, глядя на 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

Отмеченный ответ совершенно неверный. Все, что делает, это скрывает консольный лог-журнал и ничего не делает для решения проблемы. Вы также можете закрыть глаза, и это приведет к тому же результату.

Проблема вызвана узловым гипсом и только этим. Его целью является компиляция собственных расширений для определенных модулей, таких как 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сам и проверить версии.

cyberwombat
источник
5

При создании установки для www.spotdekho.comновой windows10машины я не смог выполнить команду "nodemon web.js" из-за той же ошибки

«Ошибка: не удается найти модуль« ../build/Release/bson »»

Получил это с помощью следующих шагов:

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

Это решит проблему.

PS: я использую версию Мангуста 4.8.8.

Спасибо :), надеюсь, это поможет кому-то.

Spotdekho
источник
4

В моем случае, биты, которые идут с mongoose ( 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 и после этого все заработало.

BT
источник
3

У меня тоже была такая же проблема с bson.

пробовать новую версию мангуста

npm install mongoose@4.4

решил проблему.

Массимо.

Макс Тамтам
источник
3

Запустите эту команду, чтобы удалить mongoose npm uninstall --save mongoose- после этого переустановите его, но на этот раз npmавтоматически установит последнюю версию mongoose run. npm install --save mongooseЭто сработало для меня.

otoloye
источник
2

К сожалению, все приведенные выше ответы только наполовину. Потребовалось много времени, чтобы понять это.

Установка Mongoose 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.

У меня установлена ​​Visual Studio 2012, эта команда работает для меня. (после удаления директории node_modules)

npm install --msvs_version = 2012

По какой-то причине, node-gyp пытается использовать неверную версию компилятора Visual Studio. Я также заметил, что команда «npm install» выводила предупреждения о не зависящих от узла зависимостях при установке модулей 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
phocks
2

Единственное, что мне помогает в Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

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

Опять же, что означает эта ошибка?

На самом деле, это даже не ошибка. Вы все еще можете использовать мангуст. Но в этом случае вместо быстрой нативной реализации модуля bson вы получаете js-реализацию, которая медленнее. Я видел много советов, таких как: «редактировать путь глубоко внутри node_modules ...» - что совершенно бесполезно, потому что это не решает проблему, а просто отключает сообщения об ошибках.

Alendorff
источник
1

Попробуйте это npm install bsonиnpm update

Рагхав Маникандан
источник
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?
Тронк
1
Ох, правда, плохо. Я не видел этот тег
Виктор Перов
1

Лучшим решением для меня было обновление с node-mongodb 1.x до 2.x.

jczaplew
источник
1

Я понимаю, что этой теме более 1 года, но она мне помогла, хотя и с другим модулем.

Я установил mongoose-post-findv0.0.2 и эта проблема началась. Чтобы исправить это, я использовал предложения и перешел в \ node_modules \ mongoose-post-find \ node_modules \ bson \ ext и открыл файл index.js.

Файл начинается с блока try catch, требующего правильной версии 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

В нашем случае причина, по которой версия bson для c ++ не была найдена, заключалась в том, что мы работали за корпоративным прокси-сервером, и что-то в процессе сборки 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 установить mongoose --msvs_version = 2012, если у вас установлено несколько Visual, у меня это сработало

АКИД Ахмед
источник
0

Первая копия bson.jsкода сbrowser_build folder

второй создать новый файл bson.jsи вставить код

третье сохранить новый файл рядом с в index.js.

rktel
источник
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.

hbuenoc
источник
0

Я пытался, bson = require('../browser_build/bson');но в итоге столкнулся с другой ошибкой

Невозможно установить свойство 'BSON_BINARY_SUBTYPE_DEFAULT' из неопределенного

Наконец, я исправил эту проблему просто npm update, это исправит модуль bson в mongoose.

unclejimbo
источник
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');
        }
    }
user3168528
источник