Não foi possível encontrar o código do módulo '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: falha ao carregar a extensão c ++ bson, usando a versão JS pura


156

Estou recebendo o erro abaixo:

{ [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } 
  js-bson: Failed to load c++ bson extension, using pure JS version

Aqui estão os detalhes da minha versão:

  • SO: Windows 7

  • MongoDB: 2.6.5

  • Nó: 0.12.0

Eu tentei essas coisas antes de publicar o problema aqui.

  1. Eu fui para a \node-modules\mongoose\node-modules\mongodb\node-modules\bsonpasta e fiz a alteração abaixo no arquivo binding-gyp de 'include_dirs': [ '<!(node -e "require(\'nan\')")' ] para 'include_dirs': ["<!(nodejs -p -e \"require('path').dirname(require.resolve('nan'))\")"]

  2. Executou este comando npm install -g node-gyp

  3. Atualizei a versão do mangusto para 3.8.21 dentro package.json

Nada funciona. Por favor sugira


2
Tentei abaixo as opções sugeridas por você, mas sem sucesso. Estou recebendo o erro abaixo do código {[Erro: não é possível encontrar o módulo '../build/Release/bson']: 'MODULE_NOT_FOUND'} js-bson: Falha ao carregar a extensão c ++ bson, usando a versão JS pura c: \ raj \ project \ meandemo \ node_modules \ express \ lib \ router \ route.js: 170 lança novo erro (msg); ^ Erro: Route.get () requer funções de retorno, mas tem um [objeto indefinido] na rota <anonymous>.
navra


1
Por favor, veja esta solução, espero que funcione! Como a extensão C ++ BSON também é necessária para vários outros módulos. Nota gentilmente que, esta solução é específico para Microsoft-OS Win-7 stackoverflow.com/a/29714359/4154706
aitchkhan

Confira as respostas a esta pergunta também: Falha ao carregar c ++ extensão bson
totymedli

Respostas:


165

Encontre no módulo npm mongodb:

.. \ node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

Mude o caminho para a versão js no bloco catch:

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

Para:

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

Ou copie o arquivo em:

.. \ node_modules \ bson \ build \ Release \ bson

De:

.. \ node_modules \ bson \ browser_build \ bson


1
Impressionante! Porém, o ambiente local, portanto, nada de trágico deve acontecer de qualquer maneira.
Manatax 17/03/2015

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

25
Esta não é uma solução. Com o mesmo resultado, você pode apenas remover as strings que imprimem erros. Este erro aparece devido ao plug-in c ++ nativo para bson não encontrado e, nesse caso, a realização do js será usada de qualquer maneira.
18119 Alainff

4
@ Alendorff True, mas é isso que a maioria de nós procura. Não me importo com o plug-in C ++, quero me livrar dos avisos porque eles quebram o Node Inspector. Nesta perspectiva, sua sugestão (remoção de impressões de erro) também é uma solução, porque isso não deve ser um erro, o código funciona bem com o fallback JS.
Totymedli # 26/16

3
Desculpe, o voto negativo, pois a segunda melhor resposta aqui, na verdade, tem a solução correta e sem hackers: Instale uma versão não quebrada do pacote!
jrista

70

Eu tive esse problema hoje (19 de fevereiro de 2016) e o resolvi instalando a versão mais recente do Mongoose. Tente colocar isso no seu package.json:

"mongoose": "~4.4"

Espero que ajude. Resolvi isso para mim!


1
Trabalhou para mim. Eu acho que é tudo um problema com uma versão antiga do mangusto, que eu tive após seguir um tutorial antigo. IMO, esta deve ser a resposta correta.
Edward Newell

8
Melhor resposta, todos os outros sobre como editar o código dentro de módulos são hacks não soluções
bicicleta

2
Solução mais direta, sem a necessidade de mexer com node_modules / mongodb etc. Obrigado!
Mikeym 01/07/19

1
Um dos melhores, apenas mangusto desinstalação (NPM desinstalação mangusto) e reinstalá-lo novamente (NPM instalar mangusto)
Grijan

18

O problema é que quando você instala o mangusto via npm, ele assume que você tem o python instalado no Windows e tenta criar as bibliotecas necessárias. Como você não tem python, ele pula a fase de construção com um aviso. Mas quando você inicia seu aplicativo, os módulos necessários não existem, então você recebe esse erro.

Para fazer as coisas corretamente, instale primeiro o python (versão 2.7) no seu computador em: https://www.python.org/downloads/ ou se você tiver instalado o chockolatey, basta digitar choco install python2.

Em seguida, verifique se sua variável python está definida. Você pode configurá-lo no prompt de comando, como:

SET python=D:\Python27\python.exe

(Claro que você deve alterar o caminho de acordo com a sua localização do python) Em seguida, instale o node-gyp:

npm install -g node-gyp

Agora você pode reinstalar o mangusto ou qualquer outro módulo que esteja causando o problema:

npm install mongoose

Desta vez, você verá algumas linhas amarelas em vez das vermelhas, mas o erro desaparecerá.


2
A versão do python é importante. node-gyp não funciona com a versão> 3.0
MatthieuLemoine

1
Esta não é uma solução completa ... Ainda estou recebendo o seguinte erro: MSBUILD: erro MSB3428: Não foi possível carregar o componente do Visual C ++ "VCBuild.exe".
orszaczky

@TheRebel Está assumindo a cadeia de ferramentas vs2010. Adicione --msvs-version=2012ou 2013edependendo do que você instalou. por exemplonpm install mongoose --msvs-version=2012
RichieRich 27/09/2015

o que fazer se estiver implantando o aplicativo do nó na nuvem heroku.
Jsbisht #

15

Resolvi esse problema instalando a versão mogoose 3.8.23

npm install mongoose@3.8.23

trabalhou aqui. esta é uma versão mais antiga? porque funcionou?
Victor Ferreira

15

Isso funcionou para mim. Pesquise no seu espaço de trabalho o texto:

"../build/Release/bson"

Você provavelmente o encontrará nos módulos mongose ​​e monk.

Substitua cada um:

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

com:

bson = require('bson');

Isso é tudo!


Eu estava recebendo esse erro ao tentar executar os testes padrão depois de configurar um projeto usando o meanjs. Isso consertou. Obrigado.
RaneWrites

7

Tente npm install mongoose@3.8.23e também substitua bson = require('../build/Release/bson');para

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


Verifique se o caminho para o bson.js está correto. Para mim bson = require ('../ browser_build / bson.js'); trabalhou. Verifique também a versão mangusto antes de iniciar a instalação.
Vikram Shetty

7

Isso funcionou para mim:

Vá para o arquivo (no seu projeto):

node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js

e mude:

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

para:

bson = require('bson');

Referência: https://github.com/mongodb/js-bson/issues/118


2
Como você conseguiu que essa correção persistisse? Você verificou seu node_modulesdiretório no controle de origem?
Mark Stosberg

7

Resposta curta

Instale a versão mais recente do mongodb.

Um pouco mais de resposta

Verifique se o seu package.json está usando a versão mais recente do mongodb, remova o node_modules / mongodb e faça a instalação do npm novamente. Se você não usou o mongodb como dependência direta, tente descobrir qual pacote está usando o mongdb. Eu usei:

find . -type f -name package.json | xargs grep mongodb
...
./sails-mongo/package.json:    "mongodb": "1.4.26",
...

Atualizei ./sails-mongo/package.json para:

"mongodb": "2.1.7",

Em seguida, remova node_modules / mongodb e instale o npm novamente. Parece bem agora.

Resposta ainda mais longa

Não gosto da maneira atual sugerida de usar

require('../browser_build/bson')

Desde que analisamos ../browser_build/bson.js, um arquivo de linhas de 4k +, que parece também uma implementação "não nativa". Portanto, apesar de não apresentar queixas, ainda está "usando a versão JS pura", o que significa desempenho mais lento.

Olhando https://github.com/mongodb/js-bson/issues/145 e https://github.com/mongodb/js-bson/issues/165 , parece que o problema foi causado por:

antoniofruci comentou em 15 de set de 2015

Acabei de descobrir que o código c ++ foi removido há 6 meses e agora é uma dependência opcional: bson-ext. De fato, se você instalar a versão mais recente, nenhum erro ocorrerá.

Então, tentei remover todo o node_modules e ainda recebi o mesmo erro. E olhando para o package.json do node_modules / mongodb, sua versão ainda é 1.4.26, não a mais recente 2.1.7.

Aparentemente, meu mongodb vem como uma dependência de outro pacote que instalei: sails-mongo. Modificar o package.json do sails-mongo e refazer a instalação do npm finalmente resolve o problema.


6

Implantando o Keystone JS CMS , tive o mesmo erro e acho que a solução mais elegante é a seguinte:

Instalar npm-check-updates:

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

No diretório do site keystone, onde package.jsonestá localizado, verifique as dependências:

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

Atualize todos os pacotes:

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

E finalmente, se você escolher jademodelos, talvez seja necessário instalar o jademódulo explicitamente:

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

5

A resposta marcada está completamente errada. Tudo o que faz é ocultar a instrução de log do console e não faz nada que resolva o problema real. Você também pode fechar os olhos e obterá o mesmo resultado.

O problema é causado pelo node-gyp e apenas isso. Seu objetivo é compilar extensões nativas para certos módulos, como o bson.

Se isso não acontecer , o código retornará para a versão JS e gentilmente informará você através da mensagem informativa:

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

Presumo que a pergunta seja realmente sobre como compilar a extensão C ++ nativa, em vez de simplesmente não ver a mensagem, então vamos abordar isso.

Para que o node-gyp funcione, o node-gyp deve estar atualizado com seu nó e o compilador C ++ (que serão diferentes com base no seu sistema operacional). Tão importante quanto o seu módulo também deve estar atualizado.

Primeiro desinstale e reinstale o node-gyp

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

Agora você precisará desinstalar e reinstalar completamente qualquer módulo do nó no seu aplicativo (que inclui também os módulos instalados pelos requisitos) que possuem o bson. Isso deve resolver o erro. Você pode procurar por 'Release / bson' e encontrar os culpados.

find node_modules/ -type 'f' -exec grep -H 'Release/bson' {} \;

E então desinstale e reinstale esses módulos.

Mais fácil é refazer a node_modulespasta inteira :

 rm -rf node_modules
 npm cache clear
 npm i

Se você ainda tiver problemas, então 1) seu módulo está desatualizado - verifique o rastreador de problemas no repo ou 2) você tem um conflito em potencial - às vezes podemos ter um node-gyp local, por exemplo. Você pode executar node-gypsozinho e verificar as versões.


5

Ao criar a configuração para www.spotdekho.comem uma nova windows10máquina, não consegui executar o comando "nodemon web.js" devido ao mesmo erro

"Erro: Não foi possível encontrar o módulo '../build/Release/bson'"

Foi corrigido pelas etapas abaixo:

  1. Crie a pasta "Release" dentro de "node_modules \ bson \ build \" location
  2. Copie o bson.js de "node_modules \ bson \ browser_build \"
  3. Cole o bson.js na pasta "node_modules \ bson \ build \ Release".

Isso resolverá o problema.

PS: Estou usando o mangusto versão 4.8.8.

Obrigado :), espero que ajude alguém.


4

No meu caso, os bits que acompanham o mongoose ( npm install mongoose) têm uma versão funcional do mongodbpacote em sua node_modulespasta.

As etapas a seguir me salvaram o trabalho de solucionar o problema:

  • npm install mongoose
  • copiar node_modules\mongoose\node_modules\mongodbpara minha node_modulespasta raiz (substituindo qualquer versão fornecida npm install mongodb)
  • ignore o Failed to load c++ bson extension...erro (ou altere o código para silenciar o problema)

3

Quando eu estava recebendo erros como esse, estava atualizando do nó v0.10 para o nó v4.xx. O que eu precisava fazer era instalar uma versão mais recente do gcc (acho que tinha o gcc v4.4.x ou algo assim). Atualizei para o gcc 4.7.2 e as coisas funcionaram depois disso.


3

Eu também tive o mesmo problema com bson.

tentando uma versão mais recente do mangusto

npm install mongoose@4.4

resolveu o problema.

Massimo.


3

Execute este comando para desinstalar o mongoose npm uninstall --save mongoose- depois reinstale-o, mas desta vez npminstale automaticamente a versão mais recente do mongoose run npm install --save mongooseIsso funcionou para mim.


2

Infelizmente, todas as respostas acima são apenas metade certas. Demorou muito tempo para descobrir isso.

O Mongoose bson install via npm lança um aviso e causa o erro ...

npm install -g node-gyp

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

Isso funciona como mágica !!


2

Se você estiver usando o Windows 8.1, convém instalar os módulos npm com o compilador correto do visual studio.

Eu tenho o Visual Studio 2012 instalado, este comando funciona para mim. (após excluir o diretório node_modules)

npm install --msvs_version = 2012

Por alguma razão, o node-gyp está tentando usar a versão incorreta do compilador do Visual Studio. Notei também que o comando "npm install" estava imprimindo avisos sobre dependências não-node-gyp ao instalar os módulos mongodb e mongoose.

Depois de usar o msvs_version correto, os avisos de instalação do npm desapareceram e o aviso do console ao executar meu aplicativo nodejs.

Você também pode querer certificar-se de ter a versão correta do Python 2.7.X instalada e não o Python 3.0.X.

Você também precisará garantir que o python esteja no seu caminho env.


Isso funcionou para mim no Windows 8.1 com o Visual Studio Community Edition 2013 usandonpm install --msvs_version=2012
phocks

2

A única coisa que me ajuda no Windows 7 (x64): https://stackoverflow.com/a/29714359/2670121

Reinstale o nó e o python com versões x32.
Passei muito tempo com esse erro (falha ao carregar a extensão c ++ bson) e, finalmente, quando instalei o módulo node-gyp(para construir addons nativos) e até instalei o SDK do Windows com o visual studio - o nodejs não reconheceu o módulo bson.node montado como módulo. Depois de reinstalar, o problema se foi.

Mais uma vez, o que significa esse erro?

Na verdade, nem é um erro. Você ainda pode usar o mangusto. Mas, neste caso, em vez da rápida realização nativa do módulo bson, você obtém o js-realization, que é mais lento. Eu vi muitas dicas como: "editar caminho no fundo do node_modules ..." - que é totalmente inútil porque não resolve o problema, mas apenas desativa as mensagens de erro.



1

Você nunca deve alterar arquivos na pasta da biblioteca NODE_MODULES.

Esses arquivos são resultado do npm installcomando.

Basicamente, acho que para os usuários do Windows - o caminho certo é usar a VM. É o que estou fazendo quando trabalho em casa.

Tudo que você precisa:

for CentOS: yum install gcc gcc-c++ make openssl-devel

for Debian/Ubuntu: apt-get install build-essential

e então npm installou, se você já fez isso -npm update


Ele diz bem na pergunta que está usando o Windows 7 - como o comando CentOS e Debian ajuda?
Thronk 28/11/2015

1
Sério, meu mal. Eu não vi essa tag #
Victor Perov

1

A melhor solução para mim foi atualizar do node-mongodb 1.x para 2.x.


1

Sei que esse segmento tem mais de um ano, mas me ajudou, embora com um módulo diferente.

Eu instalei o mongoose-post-findv0.0.2 e esse problema começou. Para corrigi-lo, usei as sugestões e naveguei para \ node_modules \ mongoose-post-find \ node_modules \ bson \ ext e abri o arquivo index.js.

O arquivo começa com um bloco try catch tentando exigir a versão bson correta

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

esta é a versão corrigida. O que estava acontecendo é que ele tentou carregar o bson a partir de ../build/Release/bson, não conseguiu encontrá-lo e caiu na armadilha. Tentou-se carregar o bson novamente em ../build/Release/bson e, é claro, falhou. Então, eu mudo o caminho na captura para procurar em ../browser_build/bson. Isso resolveu o erro.

Coloco isso por completo.


1

Eu tive o mesmo problema após a atualização da versão do Ubuntu para 16.04. Eu resolvi dessa maneira, espero que ajude.

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

1

No nosso caso, a razão pela qual a versão c ++ bson não foi encontrada foi porque estávamos atrás de um proxy corporativo e algo no processo de compilação do BSON precisa procurar os arquivos. Quando examinamos node_modules / bson / builderror.log, vimos um erro como este:

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)

O que sugeriu que o proxy pode ser o problema. A definição das variáveis ​​de ambiente http_proxy e https_proxy resolveu o problema.

Desculpe por despertar comentários sobre isso, mas eu queria postar isso para qualquer pessoa que acerte isso no futuro, pois esse tópico foi muito útil para resolver nosso problema.


0

Tentei instalar o npm mongoose --msvs_version = 2012, se você tiver vários visuais instalados, funcionou para mim


0

bson.jsCódigo da primeira cópia debrowser_build folder

segundo crie um novo arquivo bson.jse cole o código

terceiro, salve o novo arquivo próximo a in index.js.


0

Estou trabalhando com o SO Windows 8.1 e tive o mesmo problema. A fonte do problema foi a versão do Python. Encontrei o problema de origem, revise o arquivo ... \ node_modules \ mongodb \ node_modules \ mongodb-core \ node_modules \ kerberos \ builderror.log.

Eu instalei a versão correta do Python (2.7.9 para 64 bits) e resolveu o meu problema.

Nota: A versão instalada do python deve ser igual ou superior a 2.7.5 e inferior a 3.0.0


0

Eu tentei, bson = require('../browser_build/bson');mas acabei encontrando outro erro

Não é possível definir a propriedade 'BSON_BINARY_SUBTYPE_DEFAULT' de indefinida

Finalmente, eu npm updatecorrigi esse problema simplesmente por , isso corrigirá o módulo bson no mangusto.


0

Então, eu tenho o mesmo problema e acontece que o URL mongoDB especificado não existe. Portanto, para corrigir isso, você precisa ir na pasta ".. \ server \ config \ environment" e editar no arquivo "development.js" o link para o mongoDB.

Exemplo:

// Development specific configuration
// ==================================
module.exports = {
  // MongoDB connection options
  mongo: {
    uri: 'mongodb://localhost/test2-dev'
  },

  seedDB: true
};

Portanto, altere "uri: 'mongodb: // localhost / test2-dev'" para algum caminho real para o banco de dados do mongoDB.

Ficarei feliz se meu post ajudar alguém ...


0

localize no módulo npm mongodb ..node_modules \ mongodb \ node_modules \ bson \ ext \ index.js

e mude o caminho para a versão js no bloco catch

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

para 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');
        }
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.