首页 文章

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

提问于
浏览
152

我收到以下错误:

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

  • 跑这个命令 npm install -g node-gyp

  • 我已经将_mongoose版本更新为3.8.21 package.json

什么都行不通 . 请建议

30 回答

  • 3

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

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

    最后我简单地通过 npm update 解决了这个问题,这将修复mongoose中的bson模块 .

  • 0

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

    "mongoose": "~4.4"
    

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

  • 6

    First 复制 bson.js 代码来自 browser_build folder

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

    third 将新文件保存在 index.js 附近 .

  • 3

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

  • 2

    在npm模块mongodb中查找:

    .. \ node_modules \ mongodb \ node_modules \ bson \ _xt \ 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

  • 3

    问题是当您通过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
    

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

  • 7

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

    npm install mongoose@3.8.23
    
  • 1

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

    "../build/Release/bson"
    

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

    然后更换每个:

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

    有:

    bson = require('bson');
    

    就这样!

  • 7

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

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

  • 18

    这对我有用:

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

    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

  • 1

    简答

    安装最新版本的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于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终于解决了这个问题 .

  • 7

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

    安装 npm-check-updates

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

    在您的keystone站点目录中,放置 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
    
  • 2

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

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

    如果它没有这样做 then 代码将回退到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 并验证版本 .

  • 15

    在新的 windows10 机器中为 www.spotdekho.com 创建设置时,由于同样的错误,我无法运行命令 "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 : I am using mongoose version 4.8.8 .

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

  • 1

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

  • 67

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

  • 5

    我也和bson有同样的问题 .

    尝试更新的猫鼬版本

    npm install mongoose@4.4
    

    解决了这个问题 .

    马西莫 .

  • 1

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

  • 0

    不幸的是,所有上述答案都只有一半..花了很长时间来弄清楚这一点..

    通过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
    

    这就像魔术一样!

  • 0

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

  • 1

    唯一可以帮助我在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内部编辑路径...” - 这完全没用,因为它没有解决问题,只是关闭了错误消息 .

  • 0

    试试这个 npm install bsonnpm update

  • 0

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

  • 1

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

  • 4

    我意识到这个帖子已经有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,找不到它并落入 grab . 试图从../build/Release/bson再次加载bson,当然也失败了 . 所以我改变了catch中的路径来查看../browser_build/bson . 这解决了错误 .

    我发布这个是为了完整性 .

  • 162

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

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

    在我们的例子中,找不到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环境变量解决了它 .

    很抱歉重新发表对此的评论,但我想将此发布给其他人,因为这个帖子在解决我们的问题时非常有帮助 .

  • 15

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

  • 2

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

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

  • 5

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

相关问题