找不到模块'../build/Release/bson'] code:'MODULE_NOT_FOUND'} js-bson:无法加载c ++ bson扩展,使用纯JS版本

我收到以下错误:

{ [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文件夹,并且在binding-gyp文件中从'include_dirs'改变了:['

  2. 运行这个命令npm install -g node-gyp

  3. 我已经将package.json中的mongoose版本更新到3.8.21

没有任何工作 请build议

在npm模块中查找mongodb:

.. \ node_modules \ MongoDB的\ node_modules \ BSON \分机\ index.js

在catch块中更改js版本的path:

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

至:

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

或者复制文件在:

.. \ node_modules \ BSON \build立\发布\ BSON

从:

.. \ node_modules \ BSON \ browser_build \ BSON

我今天(2016年2月19日)有这个问题,我只是通过安装最新版本的Mongoose来解决它。 尝试把这个在你的package.json中:

 "mongoose": "~4.4" 

希望有所帮助。 为我解决了!

问题是当你通过npm安装mongoose它假定你的窗口上安装了python,并试图build立所需的库。 既然你没有python,它会跳过build立阶段的警告。 但是,当你开始你的应用程序,所需的模块不在那里,所以你得到这个错误。

为了做正确的事情首先在您的计算机上安装Python(2.7版): https ://www.python.org/downloads/或者如果你已经安装了chockolatey只需inputchoco install python2

然后确保你的pythonvariables被设置。 你可以在命令提示符上设置它,如:

 SET python=D:\Python27\python.exe 

(当然你应该根据你的python位置来改变path)然后安装node-gyp:

 npm install -g node-gyp 

现在你可以重新安装mongoose或任何模块导致问题:

 npm install mongoose 

这次你会看到一些黄线而不是红线,但是错误将会消失。

我通过安装mogoose版本3.8.23解决了这个问题

 npm install mongoose@3.8.23 

这对我有效。 在您的工作区中search文本:

 "../build/Release/bson" 

你可能会在蒙牛和僧侣模块里面find它。

然后replace每个:

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

有:

 bson = require('bson'); 

就这样!

试试npm install mongoose@3.8.23 ,并replacebson = require('../build/Release/bson');

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

这对我工作:

转到文件(在您的项目中):

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

简短的回答

安装最新版本的mongodb。

多一点答案

确保你的package.json正在使用最新版本的mongodb,然后删除node_modules / mongodb并再次执行npm install。 如果您没有将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。 现在似乎很好。

更长的答案

我不喜欢目前使用的build议方式

 require('../browser_build/bson') 

自从查看../browser_build/bson.js,这是一个4k +行文件,这看起来也是一个“非本机”实现。 所以尽pipe不会吐出任何抱怨,但仍然是“使用纯JS版本”,这意味着性能较慢。

看看https://github.com/mongodb/js-bson/issues/145和https://github.com/mongodb/js-bson/issues/165 ,似乎这个问题是由以下原因造成的:

antoniofruci在2015年9月15日发表评论

我刚刚发现,c ++代码已经在6个月前被移出,现在是一个可选的依赖项:bson-ext。 事实上,如果您安装最新版本,则不会发生错误。

所以我试图删除整个node_modules,仍然有相同的错误。 再看node_modules / mongodb的package.json,它的版本仍然是1.4.26,不是最新的2.1.7。

显然我的mongodb是作为我安装的另一个软件包的依赖:sails-mongo。 修改sails-mongo的package.json并重做npm install最终解决了这个问题。

在新的windows10机器上为www.spotdekho.com创build设置时,由于同样的错误,我无法运行命令"nodemon web.js"

“错误:找不到模块'../build/Release/bson'”

通过以下步骤获得修复:

  1. 在“node_modules \ bson \ build \”位置创build文件夹“Release”
  2. 从“node_modules \ bson \ browser_build \”复制bson.js
  3. 将bson.js粘贴到“node_modules \ bson \ build \ Release”文件夹中。

这将解决这个问题。

PS:我正在使用mongoose版本4.8.8。

谢谢:),希望它可以帮助别人。

就我而言, node_modulesnpm install mongoose node_modules在其node_modules文件夹中具有mongodb软件包的工作版本。

以下步骤为我解决问题的工作提供了帮助:

  • npm install mongoose
  • node_modules\mongoose\node_modules\mongodb复制到我的根node_modules文件夹(覆盖npm install mongodb附带的任何版本)
  • 忽略Failed to load c++ bson extension...错误(或更改代码在这个问题上保持沉默)

当我得到这样的错误时,我从节点v0.10升级到节点v4.xx。 我所要做的是安装一个新版本的gcc(我认为我有gcc v4.4.x或其他)。 我更新到海湾合作委员会4.7.2和事情后工作。

部署Keystone JS CMS我有同样的错误,我认为最优雅的解决scheme是这样的:

安装npm-check-updates

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

在放置package.json keystone站点目录中,检查依赖关系:

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

然后更新所有软件包:

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

最后,如果你select了模板的jade ,也许你需要明确地安装jade模块:

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

运行这个命令卸载mongoose npm uninstall --save mongoose – 此后重新安装,但是这次npm自动安装最新版本的mongoose run npm install --save mongoose这对我有效。

不幸的是,所有上述的答案只是一半的权利..花了很长时间来弄清楚这一点..

mongoose安装通过npm抛出警告,并导致错误…

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

这工作像魔术!

如果您使用的是Windows 8.1,则可能需要确保使用正确的Visual Studio编译器安装npm模块。

我已经安装了Visual Studio 2012,这个命令适用于我。 (在删除node_modules目录之后)

npm install –msvs_version = 2012

出于某种原因,node-gyp试图使用不正确版本的Visual Studio编译器。 我还注意到,在安装mongodb和mongoose模块时,“npm install”命令正在打印出一个关于不是node-gyp依赖关系的警告。

使用正确的msvs_version后,运行我的nodejs应用程序时,npm安装警告以及控制台警告消失。

您可能还想确保您安装了正确的Python 2.7.X版本,而不是Python 3.0.X.

你还需要确保python在你的envpath中。

唯一能帮助我在Windows 7(x64)上的: https : //stackoverflow.com/a/29714359/2670121

用x32版本重新安装node和python。
我花了很多时间与这个错误(无法加载C ++ BBS扩展),最后,当我安装模块node-gyp (用于构build本地插件),甚至安装Windows SDK与Visual Studio – nodejs无法识别组装模块bson.node作为模块。 重装后问题就没有了。

再一次,这个错误是什么意思?

其实,这甚至不是错误。 你仍然可以使用mongoose。 但在这种情况下,而不是快速本地实现bson模块,你得到了js实现,这慢了。 我看到很多提示,比如“编辑path内部的node_modules …” – 这些东西总是没用,因为它没有解决问题,只是closures了错误信息。

我也和bson有同样的问题。

尝试一个新的mongoose版本

 npm install mongoose@4.4 

解决了这个问题。

马西莫。

明显的答案是完全错误的。 所有这一切隐藏了控制台日志语句,并没有做任何事情解决实际问题。 你也可以闭上你的眼睛,它会达到相同的结果。

这个问题是由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。 这应该照顾这个错误。 你可以search'Release / bson'并find罪魁祸首。

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

然后卸载并重新安装这些模块。

更简单的方法是重做整个node_modules文件夹:

  rm -rf node_modules npm cache clear npm i 

如果你仍然遇到问题,那么1)你的模块是过时的 – 检查问题跟踪器在他们的回购或2)你有一个潜在的冲突 – 有时我们可能有一个本地节点,例如gyp。 您可以自己运行node-gyp并validation版本。

试试这个npm install bsonnpm update

find in npm module mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

并在catch块中更改js版本的path

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

我意识到这个线程是1年以上,但它帮助了我,虽然有一个不同的模块。

我安装了mongoose-post-findv0.0.2,这个问题就开始了。 为了解决这个问题,我使用了build议并导航到\ node_modules \ mongoose-post-find \ node_modules \ bson \ ext并打开了index.js文件。

该文件开始与尝试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'); } } 

这是正确的版本。 发生了什么是试图从../build/Release/bson加载bson,无法find它,并落入捕获。 尝试从../build/Release/bson再次加载bson,当然失败了。 所以我改变catch中的path来查看../browser_build/bson。 这解决了错误。

我张贴完整性。

升级版本到16.04之后,我遇到了同样的问题。 我用这种方式解决了,希望它有帮助。

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

在我们的例子中,没有findc ++版本bson的原因是因为我们是在公司代理的后面,而在BSON构build过程中需要伸手去取文件。 当我们查看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环境variables解决了这个问题。

不好意思,我想把这篇文章发给其他人,因为这篇文章对解决我们的问题非常有帮助。

尝试npm安装mongoose –msvs_version = 2012,如果你有多个Visual安装,它为我工作

首先browser_build folder复制bson.js代码

第二创build新文件bson.js并粘贴代码

第三个保存在index.js附近的新文件。

我正在使用操作系统的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

我试过bson = require('../browser_build/bson'); 但最终会遇到另一个错误

无法设置未定义的属性“BSON_BINARY_SUBTYPE_DEFAULT”

最后,我只是通过npm update来解决这个问题,这将修复mongoose中的bson模块。

所以,我有同样的问题,然后发生指定的mongoDBurl不存在。 所以,要解决这个问题,你需要去“.. \ 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数据库的一些真正的path。

我会很高兴,如果我的post会帮助别人…

你不应该改变NODE_MODULES库文件夹中的文件。

这些文件是npm install命令的结果。

基本上,我认为对于Windows用户 – 正确的方法是使用虚拟机。 这是我在家工作时所做的。

一切你需要的:

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

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

然后npm install或者,如果你已经完成了 – npm update

对我来说最好的解决scheme是从node-mongodb 1.x升级到2.x.