Sudhanshu Gaur
Sudhanshu Gaur

Reputation: 7664

NodeJs Error - Failed to load gRPC binary module because it was not installed for the current system Expected directory?

I am running my NodeJs App and i am getting an error.

sudo /usr/local/bin/node app.js    
    Error: Failed to load gRPC binary module because it was not installed for the current system
Expected directory: node-v57-linux-x64-glibc
Found: [node-v59-linux-x64-glibc]
This problem can often be fixed by running "npm rebuild" on the current system
Original error: Cannot find module '/home/projects/kj_app/node_modules/grpc/src/node/extension_binary/node-v57-linux-x64-glibc
/grpc_node.node'
    at Object.<anonymous> (/home/projects/kj_app/node_modules/grpc/src/grpc_extension.js:53:17)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/projects/kj_app/node_modules/grpc/src/client.js:37:12)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)

Edit

    sudo /usr/local/bin/npm rebuild

    > [email protected] postinstall /home/projects/kj_app/node_modules/protobufjs
> node scripts/postinstall
> [email protected] install /home/projects/kj_app/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library
[grpc] Success: "/home/projects/kj_app/node_modules/grpc/src/node/extension_binary/node-v59-linux-x64-glibc/grpc_node.node" al
ready installed
Pass --update-binary to reinstall or --build-from-source to recompile
> @google-cloud/[email protected] install /home/projects/kj_app/node_modules/@google-cloud/profiler
> node-gyp rebuild
gyp ERR! clean error 
gyp ERR! stack Error: EACCES: permission denied, rmdir 'build'
gyp ERR! System Linux 4.9.0-6-amd64
gyp ERR! command "/opt/bitnami/nodejs/bin/.node.bin" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "
rebuild"
gyp ERR! cwd /home/projects/kj_app/node_modules/@google-cloud/profiler
gyp ERR! node -v v9.8.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @google-cloud/[email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the @google-cloud/[email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-04-10T16_06_40_444Z-debug.log

Upvotes: 53

Views: 53948

Answers (13)

Devendra Rajput
Devendra Rajput

Reputation: 440

Solved: After spending a lot of time over this issue, I found the solution and it's tested as well. Just run the below command after install all the required packages along-with grpc.

For Linux & MAC:

sudo npm rebuild --target=8.1.0 --target_platform=linux --target_arch=x64 --target_libc=glibc --update-binary

For Windows:

npm rebuild --target=8.1.0 --target_platform=linux --target_arch=x64 --target_libc=glibc --update-binary

Upvotes: 0

Amineze
Amineze

Reputation: 1135

Tried npm rebuild and it didn't work for me, what worked is deleting the node_modules and the package-lock.json, and re install node packages using npm install

Upvotes: 6

Florian Ludewig
Florian Ludewig

Reputation: 5982

My problem was that I've installed grpc via yarn add grpc on my local machine.

But my code was running inside a Docker container, which had a different node version.

So before my docker-compose.yaml looked like

services:
  server:
    image: node:lts-alpine
    container_name: repro_server
    volumes:
      - ./package.json:/package.json
      - ./yarn.lock:/yarn.lock
      - ./tsconfig.json:/tsconfig.json
      - ./node_modules:/node_modules
      - ./index.ts:/index.ts
    command: yarn run ts-node-dev index

Note, that I was using node_modules from my local machine. The simple fix was to install the node_modules inside the container:

services:
  server:
    image: node:lts-alpine
    container_name: repro_server
    volumes:
      - ./package.json:/package.json
      - ./yarn.lock:/yarn.lock
      - ./tsconfig.json:/tsconfig.json
      - ./index.ts:/index.ts
    entrypoint: sh -c "yarn install --frozen-lockfile && yarn run ts-node-dev index"

Thanks to thesayyn for helping my with this issue!

Upvotes: 0

Florian Ludewig
Florian Ludewig

Reputation: 5982

No other answer worked for me. Eventually I fixed it by using the @grpc/grpc-js package instead of grpc

So I've just did

yarn remove grpc
yarn add @grpc/grpc-js

and changed all imports:

# before
import something from 'grpc'
# after
import something from '@grpc/grpc-js'

Upvotes: 3

grepx
grepx

Reputation: 463

I had the same problem and none of these solutions worked for me. For anyone having a similar lack of success, a more aggressive npm rebuild to force the correct version did it for me: npm rebuild --target=8.15.1 --target_platform=linux --target_arch=x64 --target_libc=glibc (where 8.15.1 is the node version you are using - I believe this is the version used in the original question).

Upvotes: 1

DeeZone
DeeZone

Reputation: 830

By any chance did you do a npm install in your local (node-v59) when it should have been done on the container (node-v57)? The grpc binary is for the wrong version of node thus the error. In the case of the question, it looks like a local Mac (OSX - a flavour of Linux) running linux in a Docker container.

Expected directory: node-v57-linux-x64-glibc
Found: [node-v59-linux-x64-glibc]

The solution would be to rm -fr node_modules and do npm install in the container.

Upvotes: 7

exmaxx
exmaxx

Reputation: 3629

I had a similar problem (but on the frontend, with Jest, Firebase and NVM). So this might not directly solve the original question but might help others who came here.

Check versions

Try to call these and see if node versions in the paths match:

which node
which npm

In my case also:

which firebase

Webstorm

In my case, I ran into this problem when using Webstorm, Jest, and Firebase, and I wanted to run the tests using Webstorm's tools.

It was a problem with my "Jest Run Configuration". It pointed to a different version of Node than I was using as a default for the system.

Upvotes: 2

Noor Khan
Noor Khan

Reputation: 159

following command worked for me npm rebuild --unsafe-perm --build-from-source Reference: https://docs.oracle.com/en/cloud/paas/blockchain-cloud/user/use-hyperledger-fabric-sdks-develop-applications.html#GUID-59A8279E-7A90-4823-9538-EA236BF9D164

Upvotes: 0

cristianorbs
cristianorbs

Reputation: 720

After trying many things I ended up doing the following (based on other answer):

  1. Updated node to latest version
  2. Updated npm to latest version
  3. npm rebuild on the project

Upvotes: 3

guya
guya

Reputation: 5260

npm rebuild worked for me :)

Thanx to everyone who replied

(Using n with node v8.15.1 and npm 6.4.1)

Upvotes: 19

Sean Stayns
Sean Stayns

Reputation: 4234

I had the same problem with Google Cloud Functions and Emulator, after migration from node 6 to node 8.

My Solution:

  1. npm rebuild // no effect
  2. delete node_modules folder in the functions folder
  3. npm install
  4. in the functions folder call: npm i --save firebase-functions
  5. firebase serve // start the emulator and try

Upvotes: 10

Mnebuerquo
Mnebuerquo

Reputation: 5949

I had the same problem (using nvm) and found that my selected node version was different than the one in .nvmrc. I did the following steps to fix it:

rm -rf node_modules
nvm use
yarn

I removed node_modules because it might have installed a version of some dependencies for the wrong version of node, so I want to ensure I have the correct libraries for the selected version.

When I do nvm use, it picks the version of node from the .nvmrc in my project.

You can use npm install instead of yarn. That's just how my project is set up.

Upvotes: 12

Tnc Andrei
Tnc Andrei

Reputation: 1012

It seems like you have some verion conflict

Expected directory: node-v57-linux-x64-glibc
Found: [node-v59-linux-x64-glibc]

Have you tried running npm rebuild in your app folder?

Upvotes: 29

Related Questions