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

navra
fonte
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
Possível duplicado de Falha ao carregar c ++ extensão bson
mido

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

anydasa
fonte
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!

Matt West
fonte
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á.

salihcenap
fonte
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
Rishabh Garg
fonte
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!

kahlal
fonte
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 [email protected]e também substitua bson = require('../build/Release/bson');para

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

Raghav Manikandan
fonte
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

Franco
fonte
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.

Peter
fonte
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
Manuel Alcocer
fonte
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.

cyberwombat
fonte
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.

Spotdekho
fonte
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)
Michael
fonte
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.

BT
fonte
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.

Max Tamtam
fonte
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.

otoloye
fonte
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 !!

Rama Prashanth
fonte
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.

Joseph Snow
fonte
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.

Alendorff
fonte
1

Tente isso npm install bsonenpm update

Raghav Manikandan
fonte
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

Victor Perov
fonte
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.

jczaplew
fonte
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.

Paul Stoner
fonte
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
Enrico Giurin
fonte
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.

Matt M.
fonte
0

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

AKID Ahmed
fonte
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.

rktel
fonte
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

hbuenoc
fonte
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.

unclejimbo
fonte
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 ...

Vasilic Maxim
fonte
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');
        }
    }
user3168528
fonte