我收到以下错误:
{ [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
在我发布此问题之前,我已尝试过这些内容。
我转到\node-modules\mongoose\node-modules\mongodb\node-modules\bson
文件夹,并在binding-gyp文件中进行了以下更改
来自'include_dirs': [ '<!(node -e "require(\'nan\')")' ]
至
'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]
执行此命令npm install -g node-gyp
我已将{mongoose版本更新为package.json
内的3.8.21
没有任何作用。请建议
答案 0 :(得分:163)
在npm模块中查找mongodb:
.. \ node_modules \ mongodb的\ node_modules \ BSON \分机\ index.js
在catch块中更改js版本的路径:
bson = require('../build/Release/bson');
要:
bson = require('../browser_build/bson');
或复制文件:
.. \ node_modules \ BSON \建立\推出\ BSON
自:
.. \ node_modules \ BSON \ browser_build \ BSON
答案 1 :(得分:69)
我今天遇到这个问题(2016年2月19日),我只是通过安装最新版本的Mongoose解决了这个问题。试着把它放在你的package.json中:
"mongoose": "~4.4"
希望有所帮助。为我解决了!
答案 2 :(得分: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
(当然你应该根据你的python位置改变路径) 然后安装node-gyp:
npm install -g node-gyp
现在您可以重新安装猫鼬或导致问题的任何模块:
npm install mongoose
这次你会看到一些黄线而不是红线,但错误将会消失。
答案 3 :(得分:15)
我通过安装mogoose版本3.8.23
npm install mongoose@3.8.23
答案 4 :(得分: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",
...
所以我将./sails-mongo/package.json更新为:
"mongodb": "2.1.7",
然后删除node_modules / mongodb并再次执行npm install。现在看来很好。
我不喜欢目前建议的使用方式
require('../browser_build/bson')
从查看../browser_build/bson.js,一个4k +行文件,它似乎也是一个&#34;非本地&#34;实现。因此,虽然它不会吐出任何抱怨,但仍然使用纯JS版本&#34;,这意味着性能降低。
查看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终于解决了这个问题。
答案 5 :(得分:7)
这对我有用:
转到文件(在您的项目中):
node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js
并改变:
bson = require('../build/Release/bson');
为:
bson = require('bson');
答案 6 :(得分:7)
尝试npm install mongoose@3.8.23
并替换
bson = require('../build/Release/bson');
到
bson = require('../browser_build/bson');
答案 7 :(得分:6)
部署 Keystone JS CMS 我遇到了同样的错误,我认为最优雅的解决方案是:
安装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
最后,如果您为模板选择jade
,可能需要明确安装jade
模块:
debian@keystonejs:~/myproject/manalcjim$ npm install jade --save
答案 8 :(得分:5)
在新www.spotdekho.com
计算机中为windows10
创建设置时,由于同样的错误,我无法运行命令"nodemon web.js"
“错误:无法找到模块'../ build / Release / bson'”
通过以下步骤解决了问题:
- 在“node_modules \ bson \ build \”位置
内创建文件夹“Release”- 从“node_modules \ bson \ browser_build \”复制bson.js
- 将bson.js粘贴到“node_modules \ bson \ build \ Release”文件夹中。
醇>
这将解决问题。
PS:我使用的是mongoose版本4.8.8。
谢谢:),希望它有所帮助。
答案 9 :(得分: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。这应该照顾错误。您可以搜索&#39;发布/ bson&#39;并找到罪魁祸首。
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
并验证版本。
答案 10 :(得分: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...
错误(或将代码更改为对此问题保持沉默)答案 11 :(得分:3)
当我收到这样的错误时,我正在从节点v0.10升级到节点v4.x.x.我要做的是安装一个更新版本的gcc(我想我有gcc v4.4.x或其他东西)。我更新到gcc 4.7.2,然后事情发生了。
答案 12 :(得分:3)
运行此命令卸载mongoose npm uninstall --save mongoose
- 之后重新安装它,但这次npm
会自动安装最新版本的mongoose run npm install --save mongoose
这对我有用。
答案 13 :(得分:3)
我也和bson有同样的问题。
尝试更新的猫鼬版
npm install mongoose@4.4
解决了这个问题。
马西莫。
答案 14 :(得分:2)
不幸的是,以上所有答案只有一半是正确的......花了很长时间来弄明白这一点..
通过npm安装Mongoose bson会引发警告并导致错误...
npm install -g node-gyp
git clone https://github.com/mongodb/js-bson.git
cd js-bson
npm install
node-gyp rebuild
这就像魔术一样!!
答案 15 :(得分:2)
如果您使用的是Windows 8.1,则可能需要确保使用正确的visual studio编译器安装npm模块。
我安装了Visual Studio 2012,此命令适用于我。 (删除node_modules目录后)
npm install --msvs_version = 2012
由于某种原因,node-gyp正在尝试使用不正确版本的Visual Studio编译器。我还注意到“npm install”命令在安装mongodb和mongoose模块时打印出关于不是node-gyp依赖项的警告。
使用正确的msvs_version后,运行我的nodejs应用程序时,npm安装警告以及控制台警告消失了。
您可能还希望确保安装了正确的Python 2.7.X版本,而不是Python 3.0.X。
您还需要确保python位于您的env路径中。
答案 16 :(得分:2)
唯一可以帮助我使用Windows 7(x64):https://stackoverflow.com/a/29714359/2670121
使用x32版本重新安装node和python
我花了很多时间来处理这个错误(无法加载c ++ bson扩展),最后,当我安装模块node-gyp
(用于构建本机插件),甚至安装了带有visual studio的windows SDK时 - nodejs没有识别出组装module bson.node作为模块。重新安装后,问题就消失了。
同样,这个错误是什么意思?
实际上,它甚至不是错误。你仍然可以使用猫鼬。但是在这种情况下,你得到的是js-realization,而不是bson模块的快速原生实现。我看到很多提示,例如:&#34;在node_modules内部编辑路径......&#34; - 这完全没用,因为它没有解决问题,只是关闭了错误信息。
答案 17 :(得分:1)
试试这个npm install bson
和npm update
答案 18 :(得分:1)
在我们的例子中,找不到c ++版本bson的原因是因为我们是公司代理的后面,而BSON构建过程中的某些东西需要伸出来获取文件。当我们查看node_modules / bson / builder错误.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环境变量解决了它。
很抱歉重新对此发表评论,但我希望将此版本发布给将来会遇到此问题的其他人,因为此主题非常有助于解决我们的问题。
答案 19 :(得分:1)
在将ubuntu的升级版本升级到16.04后,我遇到了同样的问题。我以这种方式解决了,希望它有所帮助。
$rm -rf node_modules
$npm --save install bson
$npm --save install mongoose
$npm install
答案 20 :(得分: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');
}
}
这是更正后的版本。发生的事情是它试图从../build/Release/bson加载bson,无法找到它并陷入困境。试图从../build/Release/bson再次加载bson,当然也失败了。所以我改变了catch中的路径来查看../browser_build/bson。这解决了错误。
我发布此内容是为了完整。
答案 21 :(得分:1)
对我来说,最好的解决方案是从node-mongodb 1.x升级到2.x。
答案 22 :(得分: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
答案 23 :(得分:0)
首先复制来自bson.js
browser_build folder
代码
第二次创建新文件bson.js
并粘贴代码
第三次将新文件保存在index.js
附近。
答案 24 :(得分:0)
我已尝试bson = require('../browser_build/bson');
但最终遇到了另一个错误
无法设置属性&#39; BSON_BINARY_SUBTYPE_DEFAULT&#39;未定义的
最后我简单地通过npm update
解决了这个问题,这将修复mongoose中的bson模块。
答案 25 :(得分:0)
试过npm install mongoose --msvs_version = 2012,如果你安装了多个Visual,它对我有用
答案 26 :(得分:0)
所以,我有同样的问题,然后发生指定的mongoDB URL不存在。所以,要解决这个问题,你需要去&#34; .. \ server \ config \ environment&#34;文件夹和编辑&#34; development.js&#34;提交mongoDB的链接。
示例:
// Development specific configuration
// ==================================
module.exports = {
// MongoDB connection options
mongo: {
uri: 'mongodb://localhost/test2-dev'
},
seedDB: true
};
所以,改变这个&#34; uri:&#39; mongodb:// localhost / test2-dev&#39;&#34;到你的mongoDB数据库的一些真实路径。
如果我的帖子会帮助某人,我会很高兴...
答案 27 :(得分:0)
在npm模块中找到mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js
并在catch块中更改js版本的路径
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');
}
}
答案 28 :(得分:0)
我正在使用OS Windows 8.1,我遇到了同样的问题。问题的根源是Python的版本。我发现原始问题检查文件... \ node_modules \ mongodb \ node_modules \ mongodb-core \ node_modules \ kerberos \ builderror.log。
我安装了正确的Python版本(64位为2.7.9),它解决了我的问题。
注意:安装的python版本必须等于或大于2.7.5且小于3.0.0
答案 29 :(得分:0)
对于今天(2017年),我们拥有令人敬畏的npm模块:https://github.com/felixrieseberg/windows-build-tools 这通常可以解决很多麻烦,为窗户建造本土物品。
尝试解决问题:
Remove node_modules
npm install --global windows-build-tools
npm install
答案 30 :(得分:0)
我在mongo-sync版本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块(从catch块复制bson初始化)
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');
}
}
答案 31 :(得分:0)
首先我在npm模块中找到mongodb文件index.js ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js
并在catch块中更改js版本的路径
bson = require('../ build / Release / bson'); to bson = require('../ browser_build / bson');
然后我就像这样改变它,所有类似的...以前安装了模块...: bson = require('bson');
答案 32 :(得分:0)
我也有这个问题。
但是我将我的 mongodb 版本更改为“ ^ 2.2.33 ”,并且不再出现问题。
您应将npm rm
的旧mongodb软件包放在全局或本地,并安装此版本。
如果不想在更改路线名称上产生任何副作用,可以尝试此方法。
答案 33 :(得分:-1)
对于仍在寻找解决方案的每个人,我通过
解决了这个问题bson = require('../../../browser_build/bson.js');
而不是
bson = require(../browser_build/bson.js');
所以看看路径是否正确。
答案 34 :(得分:-2)
我通过这样做解决了这个错误,它对我来说非常有用。我已经在node-modules目录中创建了一个节点App,其中包含文件夹node-android / node-modules.So我还有一个目录bson / ext / index.js打开这个文件,你可以在catch块里面找到它。
bson = require('../build/Release/bson');
将上述行更改为
bson = require('../browser_build/bson');
并且错误消失了,我的应用程序运行正常,没有任何错误或警告。