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

zquam 发布于 2019-06-25 angularjs 最后更新 2019-06-25 13:36 312 浏览

我收到以下错误:

{ [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文件中进行了如下更改 from'include_dirs':['
  2. 运行此命令npm install -g node-gyp
  3. 我已将mongoose版本更新至package.json中的3.8.21
什么都没有请建议
已邀请:

yquo

赞同来自:

您永远不应该更改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

qut

赞同来自:

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

"mongoose": "~4.4"
希望有所帮助。为我解决了!

riure

赞同来自:

首先从browser_build folder复制bson.js代码 第二步创建新文件bson.js并粘贴代码 第三步将新文件保存在index.js附近。

oqui

赞同来自:

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

set

赞同来自:

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

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

zrerum

赞同来自:

在npm模块mongodb中查找:

..\node_modules\mongodb\node_modules\bson\ext\index.js
在catch块中更改js版本的路径:
bson = require('../build/Release/bson');
至:
bson = require('../browser_build/bson');
或者复制文件:
..\node_modules\bson\build\Release\bson
从:
..\node_modules\bson\browser_build\bson

asaepe

赞同来自:

简短回答 安装最新版本的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 +行文件,这似乎也是一个“非本地”实现。因此虽然它不会吐出任何抱怨,但仍然是“使用纯JS版本”,这意味着性能降低。 看看https://github.com/mongodb/js-bson/issues/145https://github.com/mongodb/js-bson/issues/165,问题似乎是由以下原因引起的:
antoniofruci commented on Sep 15, 2015 I just found out that c++ code has been moved out 6 months ago and it is now an optional dependency: bson-ext. Indeed, if you install latest version no error occurs.
所以我试图删除整个node_modules并仍然得到相同的错误。看一下node_modules / mongodb的package.json,它的版本仍然是1.4.26,而不是最新的2.1.7。 显然我的mongodb是我安装的另一个包的依赖:sails-mongo。修改sails-mongo的package.json并重做npm install终于解决了这个问题。

zipsum

赞同来自:

如果您使用的是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路径中。

hvelit

赞同来自:

在我的例子中,mongoose附带的位(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...错误(或将代码更改为在问题上保持沉默)

liste

赞同来自:

对于仍在寻找解决方案的每个人,我解决了它

bson = require('../../../browser_build/bson.js');
代替
bson = require(../browser_build/bson.js');
所以看看路径是否正确。

beos

赞同来自:

我意识到这个帖子是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。这解决了错误。 我发布这个是为了完整性。

ha

赞同来自:

这对我有用: 转到文件(在您的项目中): 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

qullam

赞同来自:

不幸的是,所有上述答案都只有一半..花了很长时间来弄清楚这一点.. 通过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
这就像魔术一样!

et_ea

赞同来自:

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

yut

赞同来自:

对于今天(2017年),我们有那个非常棒的npm模块:https://github.com/felixrieseberg/windows-build-tools 这通常解决了为Windows构建本机东西的许多麻烦。 尝试解决问题: Remove node_modules npm install --global windows-build-tools npm install

dsed

赞同来自:

唯一可以帮助我在Windows 7(x64)上的东西:https://stackoverflow.com/a/29714359/2670121 使用x32版本重新安装node和python。
我花了很多时间来处理这个错误(无法加载c ++ bson扩展),最后,当我安装模块node-gyp(用于构建本机插件)甚至安装了带有visual studio的windows SDK时 - nodejs没有将组装模块bson.node识别为模块。重新安装后问题消失了。 再次,这个错误意味着什么? 实际上,它甚至不是错误。你仍然可以使用猫鼬。但是在这种情况下,你没有快速的原生实现bson模块,而是js-realization,它更慢。我看到了许多提示,例如:“在node_modules内部编辑路径...” - 这完全没用,因为它没有解决问题,只是关闭了错误消息。

avelit

赞同来自:

试过npm install mongoose --msvs_version = 2012,如果你安装了多个Visual,它对我有用

mid

赞同来自:

明确的答案是完全错误的。所有这一切都隐藏了控制台日志语句,并且无论如何都无法解决实际问题。你也可以闭上眼睛,它也会达到同样的效果。 这个问题是由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。那应该照顾错误。您可以搜索'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)您可能存在冲突 - 有时我们可能会有本地节点gyp。您可以自行运行node-gyp并验证版本。

est_ut

赞同来自:

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

nin

赞同来自:

在我们的例子中,找不到c ++版本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环境变量解决了它。 很抱歉重新发表对此的评论,但我想将此发布给其他人,因为这个帖子在解决我们的问题时非常有帮助。

id_aut

赞同来自:

尝试npm install mongoose@3.8.23并替换 bson = require('../build/Release/bson');到 node_modules / bson / ext / index.js中的bson = require('../browser_build/bson');

vet

赞同来自:

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

Cannot set property 'BSON_BINARY_SUBTYPE_DEFAULT' of undefined
最后我通过npm update修复了这个问题,这将修复mongoose中的bson模块。

znihil

赞同来自:

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

"Error: Cannot find module '../build/Release/bson'"
通过以下步骤修复:
  1. Create folder "Release" inside "node_modules\bson\build\" location
  2. Copy bson.js from "node_modules\bson\browser_build\"
  3. Paste bson.js inside "node_modules\bson\build\Release" folder.
这将解决问题。 PS:我使用的是猫鼬版4.8.8。 谢谢:),希望它可以帮助某人。

jfugit

赞同来自:

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

npm install mongoose@3.8.23

rsaepe

赞同来自:

我通过这样做解决了这个错误,它对我来说非常有用。我创建了一个节点App,其中有node-android / node-modules.So文件夹,这里有node-modules目录,我还有一个目录bson / ext / index.js打开这个文件,你可以在catch块里面找到它。

bson = require('../build/Release/bson');  
将上面的行更改为
bson = require('../browser_build/bson');
并且错误消失了,我的应用程序运行正常,没有任何错误或警告。

phic

赞同来自:

我正在使用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

iid

赞同来自:

问题是当您通过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
现在您可以重新安装mongoose或导致问题的任何模块:
npm install mongoose
这次你会看到一些黄线而不是红线,但错误将会消失。

tmodi

赞同来自:

当我收到这样的错误时,我正在从节点v0.10升级到节点v4.x.x.我要做的是安装一个更新版本的gcc(我想我有gcc v4.4.x或其他东西)。我更新到gcc 4.7.2,然后事情发生了。

wnihil

赞同来自:

所以,我有同样的问题,它发生,然后指定的mongoDB URL不存在。因此,要解决此问题,您需要转到“.. \ 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数据库的一些实际路径。 如果我的帖子能帮助某人,我会很高兴的......

mqui

赞同来自:

我也和bson有同样的问题。 尝试更新的猫鼬版本

npm install mongoose@4.4
解决了这个问题。 马西莫。

dut

赞同来自:

试试这个npm install bsonnpm update

iid

赞同来自:

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

ket

赞同来自:

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

khic

赞同来自:

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

"../build/Release/bson"
您可能会在mongose和monk模块中找到它。 然后更换每个:
bson = require('../build/Release/bson');
有:
bson = require('bson');
就这样!