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

143

Я получаю следующую ошибку:

{ [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

Node: 0.12.0

Я пробовал эти вещи, прежде чем я разместил эту проблему здесь.

  • Я перешел в папку \node -modules\mongoose\node -modules\mongodb\node -modules\bson и сделал следующее изменение в файле binding-gyp from 'include_dirs': ['

  • Запустить эту команду npm install -g node -gyp

  • Я обновил версию mongoose до версии 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 throw new Error (msg); ^ Ошибка: Route.get () требует функции обратного вызова, но получил [объект Undefined] в Route. <Анонимный>
  • 1
    stackoverflow.com/questions/21656420/...
Показать ещё 3 комментария

35 ответов

159

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

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

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

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

To:

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

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

..\node_modules\BSON\построить\Release\BSON

From:

..\node_modules\BSON\browser_build\BSON

  • 4
    Это сработало для меня. Любой побочный эффект, о котором я должен знать?
  • 0
    Я не могу с уверенностью сказать. Скорее всего, будет работать хорошо. Это пути к файлу ошибок.
Показать ещё 13 комментариев
56

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

"mongoose": "~4.4"

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

  • 1
    Работал на меня. Я думаю, что это все проблема со старой версией мангусты, которая возникла после изучения старого урока. ИМО это должен быть правильный ответ.
  • 6
    Лучший ответ, все остальные о редактировании кода внутри модулей - это взломы, а не решения
Показать ещё 2 комментария
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

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

  • 2
    Версия питона важна. node-gyp не работает с версией> 3.0
  • 1
    Это не полное решение ... Я все еще получаю следующую ошибку: MSBUILD: ошибка MSB3428: Не удалось загрузить компонент Visual C ++ "VCBuild.exe".
Показать ещё 2 комментария
15

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

npm install [email protected]
  • 0
    работал здесь. это старая версия? почему это работает?
14

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

"../build/Release/bson"

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

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

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

с:

bson = require('bson');

что все!

  • 0
    Я получал эту ошибку, пытаясь запустить тесты по умолчанию после настройки проекта с помощью meanjs. Это исправило это. Благодарю.
8

Попробуйте npm install [email protected], а также замените bson = require('../build/Release/bson'); до

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

  • 0
    Убедитесь, что путь к 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 в систему контроля node_modules ?
  • 0
    нет все еще не работает для меня
5

Короткий ответ

Установите последнюю версию 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/issues/145 и https://github.com/mongodb/js-bson/issues/165, похоже, проблема была вызвана:

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

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

Итак, я попытался удалить весь node_modules и по-прежнему получил ту же ошибку. И глядя на package.json из node_modules/mongodb, его версия все еще 1.4.26, а не последняя версия 2.1.7.

По-видимому, мой монгодд приходит как зависимость другого пакета, который я установил: паруса-монго. Модификация package.json из sails-mongo и повторная установка npm окончательно решают проблему.

  • 0
    «Немного длиннее ответ» работал отлично для меня
4

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

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

Устанавливает его с помощью следующих шагов:

  • Создайте папку "Release" внутри "node_modules\bson\build \" location
  • Скопировать bson.js из "node_modules\bson\browser_build \"
  • Вставьте bson.js внутри папки node_modules\bson\build\Release.

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

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

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

4

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

Проблема вызвана node -gyp и только это. Его цель состоит в том, чтобы скомпилировать собственные расширения для определенных модулей, таких как bson.

Если это не удается сделать , то код будет отвисеть от версии JS и любезно рассказать об этом через информативное сообщение:

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

Я предполагаю, что вопрос заключается в том, как скомпилировать родное расширение С++, а просто не видеть сообщение, поэтому позвольте ему обратиться к этому.

Чтобы node -gyp работал, ваш node -gyp должен быть в курсе ваших компиляторов node и С++ (которые будут отличаться в зависимости от вашей ОС). Также важно, чтобы ваш модуль также обновлялся.

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

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

Теперь вам нужно будет полностью удалить и переустановить любой модуль node в вашем приложении (включая модули, установленные также требованиями), которые имеют 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, например. Вы можете запустить node-gyp самостоятельно и проверить версии.

3

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

3

Развертывание 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
  • 1
    У меня работает на Mac
  • 0
    Это работает в Mac
3

Когда я получал такие ошибки, я обновлялся с node v0.10 до node v4.x.x. Мне нужно было установить более новую версию gcc (я думаю, что у меня был gcc v4.4.x или что-то в этом роде). Я обновился до gcc 4.7.2, и после этого все сработало.

3

В моем случае биты, которые поставляются с 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... (или изменить код для молчания в проблеме)
2

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

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

npm install [email protected]

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

Массимо.

2

Единственное, что помогает мне в Windows 7 (x64): https://stackoverflow.com/questions/29238424/error-in-npm-install-inspite-of-changing-the-file-bson

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

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

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

2

Если вы используете Windows 8.1, вы можете захотеть убедиться, что вы устанавливаете свои модули npm с помощью правильного компилятора Visual Studio.

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

npm install --msvs_version = 2012

По какой-то причине node -gyp пытается использовать неверную версию компилятора Visual Studio. Я также заметил, что команда "npm install" выводила предупреждения о не зависимостях node -gyp при установке модулей mongodb и mongoose.

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

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

Вам также необходимо убедиться, что python находится в вашем env-пути.

  • 0
    Это сработало для меня в Windows 8.1 с Visual Studio Community Edition 2013, используя npm install --msvs_version=2012
2

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

Mongoose bson устанавливает через предупреждение npm throws и вызывает ошибку...

npm install -g node-gyp

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

Это работает как магия!!

  • 1
    Это требует Python для работы.
1

В нашем случае причина, по которой С++-версия 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 решила его.

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

1

У меня была такая же проблема после обновления версии ubuntu до 16.04. Я решил таким образом, надеюсь, что это поможет.

$rm -rf node_modules
$npm --save install bson
$npm --save install mongoose
$npm install
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 и, конечно, не удалось. Поэтому я изменяю путь в catch, чтобы посмотреть.. /browser _build/bson. Это устранило ошибку.

Я публикую это для полноты.

1

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

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

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

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

Попробуйте выполнить npm install bson и npm update

0

Сначала я просто нахожу в модуле npm mongodb файл index.js..node_modules\mongodb\ node_modules\bson\ext\index.js

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

bson = require ('../build/Release/bson'); для bson = require ('../browser_build/bson');

но потом я просто изменил его вот так, все подобное... ранее установил модуль...: bson = require ('bson');

  • 0
    Изменение кодов пакетов в node_modules кажется плохой практикой
  • 0
    да ... но это было необходимо, в моем случае ... возможно, это была ошибка ... нет ничего идеального .... и это делает его намного веселее
0

На сегодняшний день (2017 год) у нас есть этот удивительный модуль npm: https://github.com/felixrieseberg/windows-build-tools который обычно решает множество проблем с созданием родных вещей для окон.

Попробуйте устранить проблему:

Remove node_modules npm install --global windows-build-tools npm install

0

Я решил эту ошибку, выполнив это, и это отлично сработало для меня. Я создал приложение node, в котором есть папка node -android/node -modules.So здесь, в каталоге node -modules. У меня есть еще один каталог bson/ext/index.js, который открывает этот файл и вы можете найти внутри блока catch.

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

измените приведенную выше строку на

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

и ошибка исчезла, и приложение работает отлично, без каких-либо ошибок или предупреждений.

0

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

0

Вы не должны изменять файлы в папке с библиотекой 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

  • 0
    Он говорит прямо в вопросе, что он использует Windows 7 - как помогают CentOS и команда Debian?
  • 1
    Ох, правда, плохо. Я не видел этот тег
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

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

Невозможно установить свойство "BSON_BINARY_SUBTYPE_DEFAULT" из undefined

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

0

Первый экземпляр bson.js код из browser_build folder

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

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

0

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

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

-1

Я попробовал это в монго-синхронизации версии 4.1.2

но они внесли некоторые изменения и не работают с предлагаемыми здесь решениями.

решение, которое работало для меня

Путь node_modules/mongo-sync/node_modules/bson/ext/index.js

Старый код

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('../build/Release/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');
    }
}

Изменить блок try (скопировать инициализацию bson из блока catch)

bson = require('../lib/bson/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('../lib/bson/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');
    }
}
-2

Для всех, кто все еще ищет решение, я решил его

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

вместо

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

так что посмотрите, правильный ли путь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню