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

nav*_*vra 155 javascript windows mongodb node.js angularjs

我收到以下错误:

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

这是我的版本细节:

  • 操作系统: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. 我已经将mongoose版本更新到3.8.21里面 package.json

什么都行不通.请建议

any*_*asa 164

在npm模块mongodb中查找:

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

在catch块中更改js版本的路径:

bson = require('../build/Release/bson');
Run Code Online (Sandbox Code Playgroud)

至:

bson = require('../browser_build/bson');
Run Code Online (Sandbox Code Playgroud)

或者复制文件:

.. \node_modules\BSON \建立\发布\ BSON

从:

.. \node_modules\BSON\browser_build\BSON

  • 这不是解决方案.使用相同的结果,您可以删除打印错误的字符串.出现此错误是因为找不到bson的本机c ++插件,在这种情况下无论如何都将使用js实现. (25认同)
  • 这对我有用.我应该知道的任何副作用? (4认同)
  • bson = require('../../../ browser_build/bson.js'); (4认同)
  • @Alendorff是的,但这就是我们大多数人所寻求的.我不关心C++插件,我想摆脱警告,因为他们打破了Node Inspector.从这个角度来看,你的建议(删除错误打印)也是一个解决方案,因为这不应该是一个错误,代码可以正常使用JS回退. (4认同)
  • 对不起,downvoting作为第二个最好的答案实际上有正确的,非黑客的解决方案:安装一个非破坏版本的包! (3认同)

Mat*_*est 70

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

"mongoose": "~4.4"
Run Code Online (Sandbox Code Playgroud)

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

  • 最好的答案,关于在模块内编辑代码的所有其他内容都是黑客而不是解决方案 (8认同)
  • 最直接的解决方案,无需弄乱node_modules/mongodb等.谢谢! (2认同)

sal*_*nap 18

问题是当您通过npm安装mongoose时,它假定您已在Windows上安装了python并尝试构建所需的库.由于你没有python,它会跳过构建阶段并发出警告.但是当您启动应用程序时,所需的模块不存在,因此您会收到此错误.

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

然后确保你的python变量已设置.您可以在命令提示符下设置它,如:

SET python=D:\Python27\python.exe
Run Code Online (Sandbox Code Playgroud)

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

npm install -g node-gyp
Run Code Online (Sandbox Code Playgroud)

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

npm install mongoose
Run Code Online (Sandbox Code Playgroud)

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

  • python的版本很重要.node-gyp不适用于版本> 3.0 (2认同)

Ris*_*arg 15

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

npm install mongoose@3.8.23
Run Code Online (Sandbox Code Playgroud)


小智 15

这对我有用.在工作区中搜索文本:

"../build/Release/bson"
Run Code Online (Sandbox Code Playgroud)

您可能会在mongose和monk模块中找到它.

然后更换每个:

bson = require('../build/Release/bson');
Run Code Online (Sandbox Code Playgroud)

有:

bson = require('bson');
Run Code Online (Sandbox Code Playgroud)

就这样!


Rag*_*dan 7

尝试npm install mongoose@3.8.23并替换 bson = require('../build/Release/bson');

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


Fra*_*nco 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

  • 你是如何得到这个修复坚持的?你在`node_modules`目录中检查了源代码控制吗? (2认同)

Pet*_*ter 7

简短的回答

安装最新版本的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",
...
Run Code Online (Sandbox Code Playgroud)

所以我将./sails-mongo/package.json更新为:

"mongodb": "2.1.7",
Run Code Online (Sandbox Code Playgroud)

然后删除node_modules/mongodb并再次执行npm install.现在似乎很好.

甚至更长的答案

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

require('../browser_build/bson')
Run Code Online (Sandbox Code Playgroud)

从查看../browser_build/bson.js,一个4k +行文件,这似乎也是一个"非本机"实现.因此虽然它不会吐出任何抱怨,但它仍然是"使用纯JS版本",这意味着性能降低.

看看https://github.com/mongodb/js-bson/issues/145https://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终于解决了这个问题.


Man*_*cer 6

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

安装npm-check-updates:

root@keystonejs:~# npm install -g npm-check-updates
Run Code Online (Sandbox Code Playgroud)

在您的keystone站点目录中,package.json放置位置,检查依赖项:

debian@keystonejs:~/myproject/manalcjim$ npm-check-updates -u
Run Code Online (Sandbox Code Playgroud)

然后更新所有包:

debian@keystonejs:~/myproject/manalcjim$ npm install
Run Code Online (Sandbox Code Playgroud)

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

debian@keystonejs:~/myproject/manalcjim$ npm install jade --save
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 5

就我而言,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...错误(或更改代码以对问题保持沉默)


cyb*_*bat 5

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

这个问题是由node-gyp引起的.其目的是为某些模块(如bson)编译本机扩展.

如果它没有这样做,那么代码将回退到JS版本,并通过信息性消息告诉您:

Failed to load c++ bson extension, using pure JS version
Run Code Online (Sandbox Code Playgroud)

我假设问题实际上是关于如何编译本机C++扩展而不是看到消息所以让我们解决这个问题.

为了使node-gyp能够工作,你的node-gyp必须与你的节点和C++编译器保持同步(根据你的操作系统而不同).同样重要的是,您的模块也必须是最新的.

首先卸载并重新安装node-gyp

npm un node-gyp -g;npm i node-gyp -g
Run Code Online (Sandbox Code Playgroud)

现在,您需要完全卸载并重新安装应用程序中的任何节点模块(包括按要求安装的模块),这些节点模块具有bson.这应该照顾错误.您可以搜索'Release/bson'并找到罪魁祸首.

find node_modules/ -type 'f' -exec grep -H 'Release/bson' {} \;
Run Code Online (Sandbox Code Playgroud)

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

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

 rm -rf node_modules
 npm cache clear
 npm i
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到问题,那么1)您的模块已过期 - 检查其仓库中的问题跟踪器或2)您可能存在冲突 - 有时我们可能会有本地节点-gyp.您可以node-gyp单独运行并验证版本.


小智 5

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

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

通过以下步骤修复:

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

这将解决问题.

PS:我使用的是猫鼬版本4.8.8.

谢谢:),希望它可以帮助某人.