无法找到模块’. ./build/Release/bson’]代码: ‘ MODULE_NOT_FOUND’} JS-bson: 使用纯 JS 版本加载 c + + bson 扩展失败

我得到了下面的错误:

{ [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文件夹,在 bindinggyp 文件中做了以下更改 从 'include_dirs': [ '<!(node -e "require(\'nan\')")' ]'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

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

  3. 我已经在 package.json中将猫鼬版本更新为3.8

什么都不管用,请建议

141596 次浏览

在 npm 模块 mongodb 中查找:

. . node _ module mongodb node _ module bson ext index.js

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

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

致:

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

或复制档案:

. . node _ module bson 构建版本

来自:

. . node _ module bson 浏览器 _ build bson

在我的例子中,猫鼬(npm install mongoose)附带的位在其 node_modules文件夹中有一个工作版本的 mongodb包。

以下步骤使我省去了解决问题的工作:

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

我使用的是 Windows 8.1操作系统,遇到了同样的问题。问题的根源是 Python 的版本。我发现原始问题是查看文件... node _ module mongodb node _ module mongodb-core node _ module kerberos builderror.log。

我安装了正确的 Python 版本(64位版本为2.7.9) ,它解决了我的问题。

注意: 安装的 python 版本必须等于或大于2.7.5,小于3.0

不幸的是,以上所有的答案只有一半是正确的。花了很长时间才弄明白这一点。

猫鼬 bson 安装通过 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,您可能需要确保使用正确的可视化工作室编译器安装 npm 模块。

我已经安装了 VisualStudio2012,这个命令对我很有用。 (在删除 node _ module dir 之后)

Npm install —— msvs _ version = 2012

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

在使用正确的 msvs _ version 之后,npm 安装警告和运行 nodejs 应用程序时的控制台警告消失了。

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

您还需要确保 python 在 env 路径中。

尝试了 npm install monose —— msvs _ version = 2012,如果您安装了多个 Visual,那么它对我很有用

首先 browser_build folder复制 bson.js代码

创建新文件 bson.js并粘贴代码

第三个 index.js中保存接近的新文件。

我已经尝试了 bson = require('../browser_build/bson');,但是最终遇到了另一个错误

无法设置未定义的属性‘ BSON _ BINARY _ SUBTYPE _ DEFAULT’

最后我简单地用 npm update修复了这个问题,这将修复猫鼬中的 bson 模块。

在 Windows7(x64)上唯一对我有帮助的是: https://stackoverflow.com/a/29714359/2670121

使用 x32版本重新安装节点和 python。
我花了很多时间在这个错误上(未能加载 c + + bson 扩展) ,最后,当我安装模块 node-gyp(用于构建本地插件) ,甚至安装带有 Visual Studio-nodejs 的窗口 SDK 时,都不能识别组装好的模块 bson.node 作为模块。重新安装之后,问题就消失了。

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

事实上,这甚至不是错误。你还可以用猫鼬。但是在这种情况下,没有快速本地实现 bson 模块,而是得到了 js 实现,这比较慢。我看到了很多提示,比如: “ edit path deep inside node _ module...”——这些提示完全没用,因为它不能解决问题,只是关闭了错误消息。

问题在于,当您通过 npm 安装猫鼬时,它会假设您在窗口上安装了 python,并尝试构建所需的库。因为您没有 Python,所以它会跳过构建阶段并发出警告。但是当您启动应用程序时,所需的模块不在那里,因此您会得到这个错误。

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

然后确保设置了 python 变量。您可以在命令提示符下设置它:

SET python=D:\Python27\python.exe

(当然,您应该根据您的 Python 位置更改路径) 然后安装 node-gyp:

npm install -g node-gyp

现在你可以重新安装猫鼬或者任何导致问题的模块:

npm install mongoose

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

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

npm install mongoose@3.8.23

对于那些仍在寻找解决方案的人,我用

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

而不是

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

看看路径是否正确。

所以,我有同样的问题,它发生了,然后指定的 mongoDB URL 不存在。所以,要解决这个问题,你必须离开。”。.服务器配置环境”文件夹,并在“ 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 数据库的某个实际路径。

如果我的帖子能帮到某人,我会很高兴..。

试试这个 npm install bsonnpm update

在 npm 模块 mongodb. . node _ module mongodb node _ module 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');
}
}

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

Node _ module/bson/ext/index.js 中的 bson = require('../browser_build/bson');

这对我很有效:

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

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

当我遇到这样的错误时,我正在从节点 v0.10升级到节点 v4.x.x。我所要做的就是安装一个新版本的 gcc (我想我有 gcc v4.4. x 或者别的版本)。我升级到了 gcc4.7.2,之后一切都很顺利。

永远不要更改 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

显而易见的答案是完全错误的。所有这些操作只是隐藏了控制台日志语句,并且没有做任何事情来解决实际的问题。你也可以闭上眼睛,它也会达到同样的效果。

这个问题是由 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 的节点模块(包括按需安装的模块)。这样就可以解决错误了。你可在此搜寻「版权及商标注册摘要」 ,并找出罪魁祸首。

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并验证版本。

在你的工作区搜索文本:

"../build/Release/bson"

你可能会发现它内蒙古和僧侣模块。

然后替换每一个:

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

与:

bson = require('bson');

仅此而已!

今天我遇到了这个问题(2016年2月19日) ,我只是通过安装最新版本的 Mongoose 就解决了这个问题。试着把这个放进你的包里:

"mongoose": "~4.4"

希望能帮上忙,帮我解决了!

长话短说

安装 mongodb 的最新版本。

再多回答一点

确保 package.json 使用的是最新版本的 mongodb, 然后删除 node _ module/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 _ module/mongodb 并重新执行 npm install。

更长的答案

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

require('../browser_build/bson')

自从看到。.这是一个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 _ module,但仍然得到相同的错误。查看 node _ module/mongodb 的 package.json,它的版本仍然是1.4.26,而不是最新的2.1.7。

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

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

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

我安装了 monose-post-findv0.0.2,这个问题就开始了。为了解决这个问题,我使用了这些建议,并导航到 node _ module monose-post-find node _ module 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,找不到它,掉进了陷阱。又有人试图从。./build/Release/bson 当然失败了。所以我改变了捕捉的路径来查看。./浏览器 _ build/bson。这解决了错误。

为了完整起见,我发布了这篇文章。

在将 ubuntu 版本升级到16.04之后,我也遇到了同样的问题,我用这种方法解决了,希望对你有所帮助。

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

我对 bson 也有同样的问题。

试试新版猫鼬

npm install mongoose@4.4

解决了问题。

马西莫。

在我们的例子中,没有找到 c + + 版本的 BSON 的原因是因为我们在一个公司代理的后面,而且 BSON 构建过程中的某些东西需要伸出手来获取文件。当我们查看 node _ module/bson/builderror.log 时,我们看到一个如下错误:

安装出错,回滚安装 配置错误 堆栈错误: 连接被拒绝 ErrnoException 的 gyp ERR! 堆栈(net.js: 904:11) Object.after Connect 上的 gyp ERR! stack [ as oncomplete ](net.js: 895:19)

这表明代理可能是问题所在。

很抱歉重新唤醒这个评论,但是我想把这个帖子发布给其他人,因为这个帖子对解决我们的问题非常有帮助。

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

“错误: 无法找到模块’. ./build/Release/bson’”

通过以下步骤解决了这个问题:

  1. 在“ node _ module bson build”位置创建文件夹“ Release”
  2. 将 bson.js 从“ node _ module bson Browser _ build”复制到
  3. 将 bson.js 粘贴到“ node _ module bson build Release”文件夹中。

这样问题就解决了。

附注: 我使用的是猫鼬版本4.8.8。

谢谢:) ,希望对某人有所帮助。

我通过这样做解决了这个错误,它对我非常有效。我已经创建了一个节点应用程序,它的文件夹 node-android/node-module。在 node-module 目录中,我还有一个目录 bson/ext/index.js 打开这个文件,您可以在 catch 块中找到它。

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

将上面的线改为

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

这个错误对我来说已经消失了,应用程序在没有任何错误或警告的情况下运行得很好。

部署 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

运行这个命令卸载猫鼬 npm uninstall --save mongoose-然后重新安装它,但是这次 npm自动安装猫鼬运行 npm install --save mongoose的最新版本。

今天(2017年)我们有了一个令人敬畏的 npm 模块: https://github.com/felixrieseberg/windows-build-tools 它通常解决了很多困难,建立本地的东西窗口。

试着用以下方法解决这个问题:

删除 node _ module Npm install ——全局 Windows —— build-tools Npm 安装

我在 mongo-sync 版本4.1.2中试过这个

但是他们做了一些改变,并且它不适用于这里提供的解决方案

对我有效的解决办法

Path < em > node _ module/mongo-sync/node _ module/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');
}
}

首先,我在 npm module mongodb 中找到了 index.js. . node _ module 文件 mongodb node _ module bson ext index.js

并在 catch 块中将路径更改为 js 版本

Bson = 要求(’. ./build/Release/bson’) ; 要求(’. ./浏览器 _ build/bson’) ;

然后我就把它改成这样,所有类似的... 之前安装的模块..: 需要(bson) ;

我也有这个问题。

但我改变我的 蒙哥布版本“ ^ 2.2.33”,不再有问题。

您应该在 global 或 local 上使用 npm rm旧的 mongodb 包并安装这个版本。

如果任何人不想有任何副作用改变方向名称可以尝试这种方法。