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


156

我收到以下错误:

{ [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': [ '<!(node -e "require(\'nan\')")' ] 更改: 'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

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

  3. 我已经将猫鼬版本更新为3.8.21 package.json

没事。请建议


2
我尝试了以下您建议的选项,但无济于事。我遇到以下错误{[错误:找不到模块'../build/Release/bson']代码:'MODULE_NOT_FOUND'} js-bson:使用纯JS版本c:\ raj \ project无法加载c ++ bson扩展\ meandemo \ node_modules \ express \ lib \ router \ route.js:170抛出新错误(msg); ^错误:Route.get()需要回调函数,但在Route。<anonymous>
navra '02 / 02/22


1
请查看此解决方案,希望它能起作用!由于C ++ BSON扩展也是其他几个模块所必需的。请注意,此解决方案特定于Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan


可能无法
-Mido

Answers:


165

在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


1
太棒了!尽管是本地环境,所以无论如何都不会发生悲剧。
Manatax

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

25
这不是解决方案。使用相同的结果,您只需要删除打印错误的字符串即可。由于未找到bson的本机c ++插件而出现此错误,因此无论如何都将使用js实现。
阿伦多夫,2015年

4
@Alendorff是的,但这就是我们大多数人想要的。我不在乎C ++插件,我想摆脱警告,因为它们会破坏Node Inspector。从这个角度来看,您的建议(删除错误打印)也是一种解决方案,因为这不应该是一个错误,所以该代码可以与JS回退一起正常工作。
totymedli

3
抱歉,在这里作为第二好的回答,实际上是正确的,非破解的解决方案:安装软件包的完整版本!
jrista

70

我今天(2016年2月19日)遇到此问题,而我仅通过安装最新版本的Mongoose即可解决此问题。尝试将其放在package.json中:

"mongoose": "~4.4"

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


1
为我工作。我认为这是旧猫鼬版本的全部问题,我是从旧教程中学到的。IMO这应该是正确的答案。
爱德华·纽厄尔2016年

8
最好的答案,其他所有关于在模块内编辑代码的问题都是hack,而不是解决方案
自行车

2
最简单的解决方案,而无需弄乱node_modules / mongodb等。谢谢!
mikeym '17

1
最好的方法之一,只需卸载mongoose(npm卸载mongoose),然后再次重新安装(npm install
mongoose

18

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

为了正确执行操作,请先从https://www.python.org/downloads/在您的计算机上安装python(2.7版),或者如果您已安装chockolatey,则只需键入即可choco install python2

然后确保设置了python变量。您可以在命令提示符下进行设置,例如:

SET python=D:\Python27\python.exe

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

npm install -g node-gyp

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

npm install mongoose

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


2
python的版本很重要。node-gyp不适用于版本> 3.0
MatthieuLemoine 2015年

1
这不是一个完整的解决方案...我仍然收到以下错误:MSBUILD:错误MSB3428:无法加载Visual C ++组件“ VCBuild.exe”。
orszaczky 2015年

@TheRebel假设使用vs2010工具链。添加--msvs-version=20122013e根据您所安装的内容。例如npm install mongoose --msvs-version=2012
RichieRich

如果我要在heroku云上部署节点应用程序怎么办。
jsbisht


15

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

"../build/Release/bson"

您可能会在mongose和和尚模块中找到它。

然后替换每个:

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

与:

bson = require('bson');

就这样!


使用meanjs设置项目后,尝试运行默认测试时出现此错误。这样就解决了。谢谢。
RaneWrites'Apr 2'17

7

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

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


确保bson.js的路径正确。对我来说bson = require('../ browser_build / bson.js'); 工作。在进行安装之前,还要检查猫鼬的版本。
Vikram Shetty 2015年

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


2
您是如何获得此修复程序的?您是否将node_modules目录检入到源代码管理中?
马克·斯托斯伯格

7

简短答案

安装最新版本的mongodb。

答案更长一点

确保您的package.json使用的是最新版本的mongodb,然后删除node_modules / mongodb并再次进行npm安装。如果您没有将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安装。现在看起来不错。

更长的答案

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

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于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终于解决了这个问题。


6

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

安装npm-check-updates

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

在您的主要站点目录中package.json,检查相关性:

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

然后更新所有软件包:

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

最后,如果您选择jade模板,也许您将需要jade显式安装模块:

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

5

标记的答案是完全错误的。所有要做的就是隐藏控制台日志语句,并且不做任何解决实际问题的事情。您也可以闭上眼睛,将获得相同的效果。

该问题仅由node-gyp引起。其目的是为某些模块(例如bson)编译本机扩展。

如果这样做失败,代码将回退到JS版本,并通过信息性消息告诉您:

Failed to load c++ bson extension, using pure JS version

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

为了使node-gyp正常工作,node-gyp必须与您的节点和C ++编译器保持最新(这取决于您的OS)。同样重要的是,您的模块也必须是最新的。

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

npm un node-gyp -g;npm i node-gyp -g

现在,您将需要完全卸载并重新安装应用程序中具有bson的任何节点模块(包括按要求安装的模块)。那应该解决错误。您可以搜索“发布/ 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。您可以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。

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


4

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

3

当我遇到这样的错误时,我正在从节点v0.10升级到节点v4.xx。我要做的是安装较新版本的gcc(我想我有gcc v4.4.x或其他版本)。我更新到gcc 4.7.2,之后一切正常。



3

运行此命令以卸载mongoose- npm uninstall --save mongoose之后重新安装它,但是这次npm自动安装最新版本的mongoose run npm install --save mongoose


2

不幸的是,以上所有答案仅是正确的一半。.花了很长时间才弄清楚这一点。

通过npm安装猫鼬bson会引发警告并导致错误...

npm install -g node-gyp

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

这就像魔术一样!!


2

如果您使用的是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版本,而不是Python3.0.X。

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


这在Windows 8.1和Visual Studio Community Edition 2013上对我有效,使用时间npm install --msvs_version=2012
间隔为

2

在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实现,该实现要慢一些。我看到了很多提示,例如:“在node_modules的内部深处编辑路径...”-完全没有用,因为它不能解决问题,而只是关闭错误消息。



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


他说的是他正在使用Windows 7的问题-CentOS和Debian命令如何提供帮助?
Thronk 2015年

1
哦,真的,我不好。我没有看到该标签
Victor Perov

1

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


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。这样就解决了错误。

为了完整起见,我将其发布。


1

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

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

1

在我们的案例中,未找到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环境变量可以解决该问题。

很抱歉再次唤醒对此的评论,但我想将其发布给将来遇到此问题的其他任何人,因为该主题对解决我们的问题非常有帮助。



0

bson.js来自的第一个复制代码browser_build folder

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

第三,将新文件保存在中index.js


0

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


0

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

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

最后,我简单地通过npm update修复了此问题,这将在猫鼬中修复bson模块。


0

所以,我有同样的问题,它发生然后指定的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数据库的真实路径。

如果我的帖子能对某人有所帮助,我将感到非常高兴。


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');
        }
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.