352
votes

I have a Node.js app hosted on Heroku. Every time I do a git push heroku I get the following error:

Counting objects: 14, done.
Delta compression using up to 6 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (12/12), 1.20 KiB, done.
Total 12 (delta 8), reused 0 (delta 0)

-----> Node.js app detected
-----> Resolving engine versions
       Using Node.js version: 0.6.20
       Using npm version: 1.2.12
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
       npm http GET https://registry.npmjs.org/pg/0.6.15
       npm http GET https://registry.npmjs.org/socket.io
       npm http 200 https://registry.npmjs.org/pg/0.6.15
       npm http GET https://registry.npmjs.org/pg/-/pg-0.6.15.tgz
       npm http 200 https://registry.npmjs.org/socket.io
       npm http GET https://registry.npmjs.org/socket.io/-/socket.io-0.9.13.tgz
       npm http 200 https://registry.npmjs.org/pg/-/pg-0.6.15.tgz
       npm http 200 https://registry.npmjs.org/socket.io/-/socket.io-0.9.13.tgz
       npm http GET https://registry.npmjs.org/socket.io-client/0.9.11
       npm http GET https://registry.npmjs.org/policyfile/0.0.4
       npm http GET https://registry.npmjs.org/base64id/0.1.0
       npm http GET https://registry.npmjs.org/redis/0.7.3
       npm http GET https://registry.npmjs.org/generic-pool/1.0.9
       npm http 200 https://registry.npmjs.org/policyfile/0.0.4
       npm http GET https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz

       npm http 200 https://registry.npmjs.org/base64id/0.1.0
       npm http GET https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz
       npm http 200 https://registry.npmjs.org/generic-pool/1.0.9
       npm http GET https://registry.npmjs.org/generic-pool/-/generic-pool-1.0.9
.tgz
       npm http 200 https://registry.npmjs.org/socket.io-client/0.9.11
       npm http GET https://registry.npmjs.org/socket.io-client/-/socket.io-clie
nt-0.9.11.tgz
       npm http 200 https://registry.npmjs.org/redis/0.7.3
       npm http GET https://registry.npmjs.org/redis/-/redis-0.7.3.tgz
       npm http 200 https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz

       npm http 200 https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz
       npm http 200 https://registry.npmjs.org/generic-pool/-/generic-pool-1.0.9
.tgz
       npm http 200 https://registry.npmjs.org/socket.io-client/-/socket.io-clie
nt-0.9.11.tgz
       npm http 200 https://registry.npmjs.org/redis/-/redis-0.7.3.tgz

       > [email protected] install /tmp/build_36us8733h7kkr/node_modules/pg
       > node-waf configure build || (exit 0)

       Checking for program g++ or c++          : /usr/bin/g++
       Checking for program cpp                 : /usr/bin/cpp
       Checking for program ar                  : /usr/bin/ar
       Checking for program ranlib              : /usr/bin/ranlib
       Checking for g++                         : ok
       Checking for node path                   : not found
       Checking for node prefix                 : ok /tmp/node-node-nNUw
       Checking for program pg_config           : /usr/bin/pg_config
       'configure' finished successfully (0.058s)
       Waf: Entering directory `/tmp/build_36us8733h7kkr/node_modules/pg/build'
       [1/2] cxx: src/binding.cc -> build/Release/src/binding_1.o
       [2/2] cxx_link: build/Release/src/binding_1.o -> build/Release/binding.no
de
       Waf: Leaving directory `/tmp/build_36us8733h7kkr/node_modules/pg/build'
       'build' finished successfully (0.492s)
       npm http GET https://registry.npmjs.org/uglify-js/1.2.5
       npm http GET https://registry.npmjs.org/ws
       npm http GET https://registry.npmjs.org/xmlhttprequest/1.4.2
       npm http GET https://registry.npmjs.org/active-x-obfuscator/0.0.1
       npm http 200 https://registry.npmjs.org/active-x-obfuscator/0.0.1
       npm http GET https://registry.npmjs.org/active-x-obfuscator/-/active-x-ob
fuscator-0.0.1.tgz
       npm http 200 https://registry.npmjs.org/uglify-js/1.2.5
       npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz
       npm http 200 https://registry.npmjs.org/xmlhttprequest/1.4.2
       npm http GET https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1
.4.2.tgz
       npm http 200 https://registry.npmjs.org/ws
       npm http GET https://registry.npmjs.org/ws/-/ws-0.4.25.tgz
       npm http 200 https://registry.npmjs.org/active-x-obfuscator/-/active-x-ob
fuscator-0.0.1.tgz
       npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz
       npm http 200 https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1
.4.2.tgz
       npm http 200 https://registry.npmjs.org/ws/-/ws-0.4.25.tgz
       npm http GET https://registry.npmjs.org/zeparser/0.0.5
       npm http GET https://registry.npmjs.org/commander
       npm http GET https://registry.npmjs.org/tinycolor
       npm http GET https://registry.npmjs.org/options
       npm http 200 https://registry.npmjs.org/zeparser/0.0.5
       npm http GET https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz
       npm http 200 https://registry.npmjs.org/options
       npm http GET https://registry.npmjs.org/options/-/options-0.0.3.tgz
       npm http 200 https://registry.npmjs.org/tinycolor
       npm http GET https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz
       npm http 200 https://registry.npmjs.org/commander
       npm http GET https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
       npm http 200 https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz
       npm http 200 https://registry.npmjs.org/options/-/options-0.0.3.tgz
       npm http 200 https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz
       npm http 200 https://registry.npmjs.org/commander/-/commander-0.6.1.tgz

       > [email protected] install /tmp/build_36us8733h7kkr/node_modules/socket.io/node_
modules/socket.io-client/node_modules/ws
       > (node-gyp rebuild 2> builderror.log) || (exit 0)

       make: Entering directory `/tmp/build_36us8733h7kkr/node_modules/socket.io
/node_modules/socket.io-client/node_modules/ws/build'
         CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
         SOLINK_MODULE(target) Release/obj.target/bufferutil.node
         SOLINK_MODULE(target) Release/obj.target/bufferutil.node: Finished
         COPY Release/bufferutil.node
         CXX(target) Release/obj.target/validation/src/validation.o
         SOLINK_MODULE(target) Release/obj.target/validation.node
         SOLINK_MODULE(target) Release/obj.target/validation.node: Finished
         COPY Release/validation.node
       make: Leaving directory `/tmp/build_36us8733h7kkr/node_modules/socket.io/
node_modules/socket.io-client/node_modules/ws/build'
       npm ERR! cb() never called!
       npm ERR! not ok code undefined
       npm ERR! cb() never called!
       npm ERR! not ok code 1
 !     Failed to install --production dependencies with npm
 !     Heroku push rejected, failed to compile Node.js app

To [email protected]:still-chamber-1286.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:still-chamber-1286.git'

The error is in the last few lines:

npm ERR! cb() never called!
           npm ERR! not ok code undefined
           npm ERR! cb() never called!
           npm ERR! not ok code 1
     !     Failed to install --production dependencies with npm
     !     Heroku push rejected, failed to compile Node.js app

    To [email protected]:still-chamber-1286.git
     ! [remote rejected] master -> master (pre-receive hook declined)
    error: failed to push some refs to '[email protected]:still-chamber-1286.git'

I have had no problems with pushing my code to Heroku before; only since Monday have I had this error.

I have seen similar posts on the web referring to slightly different errors, but haven't seen one with ! [remote rejected] master -> master (pre-receive hook declined) before.

30
I'm getting the same error when pushing my node app to heroku today: ! [remote rejected] master -> master (pre-receive hook declined) - smithclay
Strangely, adding "engines": { "node": "0.8.x" } to my package.json fixed that error for me. - smithclay
It worked, thanks a lot :) Although it should be noted that I already had "engines": { "node": "0.6.x" } in package.json, I simply had to change it from 0.6.x to 0.8.x - Louise K
There is currently an open issue about this error with npm and node 0.10.0: github.com/isaacs/npm/issues/2907 - jonathancardoso
I fixed this for myself by simply updating npm ( $> npm install -g npm )since I was getting warnings that packages expected a higher version of it anyways in the console output. - racl101

30 Answers

382
votes

If you have npm version 5 or above, try this first:

$ sudo npm cache verify

Otherwise:

$ sudo npm cache clean

My node and npm versions are:

$ node -v
v0.10.0

$ npm -v
1.2.14

https://docs.npmjs.com/cli/cache

144
votes

For anyone hitting this page around Sept 29th, 2013, there's a closed bug in Node.js 0.10.19 which is causing this error.

https://github.com/isaacs/npm/issues/2907#issuecomment-15215278 https://github.com/joyent/node/issues/6263#issuecomment-25113849

If you're on Heroku you should upgrade to 0.10.20

"engines": {
    "node": "0.10.20"
}
57
votes

Try

sudo npm cache clean --force

More info refer: https://reactgo.com/npm-err-cb-never-called/

29
votes

IMPORTANT! The solution below is now regarded as unstable, and you should use Node Version Management instead: Node Version Manager on Github. David Walsh also has a good introduction to NVM. NVM works beautifully and I've been using it to manage legacy WordPress projects for a few years.


Please don't use this - use NVM

I just had this exactly issue when trying to install the Sage theme for WordPress. When I ran npm install on the theme directory, it failed.

Looking in the dependencies in package.json, I could see that the engine I was running for Node was out of date. Running node -v on the command line showed that I was on v0.10.9, and the latest version of Sage requires >= 0.12.0

So here's the fix for that. These steps are from David Walsh's blog

  1. Clear your npm cache: sudo npm cache clean -f
  2. Install the latest version of the Node helper: sudo npm install -g n
  3. Tell the helper (n) to install the latest stable version of Node: sudo n stable

You should then get a progress display, after which you will be up to date.

When I ran npm install after doing this, everything worked fine, and I was able to run gulp to build the initial dist directory.

23
votes

Do you have a specific version of "npm" specified under "engines" in your package.json? Sounds like NPM v1.2.15 resolved the issue (and Heroku has available). I was getting the same problem with "1.1.x".

21
votes

If you have updated angular cli, npm, node, you don't need to do anything more. Just run the command below to resolve the issue. This command also resolves the issue of "unexpected end of line".

npm install --no-package-lock
17
votes
  • Run npm install -g npm
  • Then run npm install
15
votes

Updating the NodeJS https://nodejs.org/en/ Fixed My Issue.

Run npm install -g npm & npm cache clean

12
votes

For me none of the above solutions worked (reinstalling, clearing cache, folders etc.).

My problem was solved with:

npm config set registry https://registry.npmjs.org/
9
votes

I had the same problem with NPM version 1.3.11, and solved it simply by re-running the exact same command multiple times ("npm update -g" in my case). The error popped up for a different package on each subsequent run and eventually everything updated successfully.

For me at least, it seems like it was being caused by a network issue (corrupted downloads). I was also getting an error about an invalid package, which I was able to resolve by deleting all instances of "tmp.tgz".

Edit: (Probably unrelated, but in case this helps anyone: I was using Windows, and started a command prompt as an Administrator after receiving the initial error).

9
votes

I had the same problem while installing ionic@beta. I tried the following items and they didn't help me.

  1. npm cache clean
  2. Manually delete cache from %temp%\npm-*
  3. Command prompt "Run As Administrator"

I solved the problem by installing node-v5.10.1-x64.msi (Previous version was node-v5.9.0-x64.msi) and run an npm cache clean before installing ionic@beta

It worked!

8
votes

UPDATED: The problem is pretty common here is the new fix npm cache verify run that you will be good to go!

6
votes

I just globally installed the newest version of NPM and it worked for me. I guess Clearing npm cache is optional.

npm install -g npm
6
votes

For me on npm 6.4.0 and node 10.9.0 none of the answers worked. Reinstalled node, npm, cleaned cache, removed folders ...

After some debugging it turned out I used npm link for two of my modules under development to link to each other. Once I removed and redid some linking I was able to get it all working again.

6
votes

I had the cb() never called! error, and none of the answers here directly worked for me. I was running Node v8.11.2, and I had to manually delete the package-lock.json file to get anywhere. After doing this, I ran npm cache verify per what some of the answers recommended. Then, running npm i yielded the following result:

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

up to date in 5.118s
5
votes

sudo npm cache clean didn't work out for me. Update to the latest version of node helps.

I had node v.5.91 and updated to v6.9.1

5
votes

Knowing that this is an old question and many of you had provided your answers. Just to share my experience with this error and how I fixed.

This all started after I upgrade my Node version to > 12, I did go through all the answers and try to follow steps clearing npm Cache, deleting the node_modules folder. No one of them resolve my problem.

The root cause in my case was proxy restricting installation. I deleted the proxy settings to fix the problem.

  1. Check if you have any proxy config

    npm config list
    
  2. Delete them by

    npm config delete proxy
    npm config delete http-proxy
    npm config delete https-proxy
    
  3. Now try

    npm install
    
5
votes

[Works] try

npm config delete https-proxy

it would have conflicted with proxy.

5
votes

As of March 2021 the new NPM version fixes many of those issues.

So calling npm i -g npm@latest fixes this again (In between this did not work).

5
votes

Since NPM 6 you can do a clean install.
That was the only solution which worked for me.

Just run the following:

npm clean-install

Notes:

  • You might also manually remove the node_modules folder and try again in case the command above failed.
  • If still doesn't work, the global cache might be broken, try running npm cache clean --force and then do a clean install.
  • The clean-install command works on npm 6 and above. For older versions consider checking the other answers below.
4
votes

It appears that particular dependency versions can cause this issue. For example, gulp-uglifycss 1.0.7 has this problem (see https://github.com/rezzza/gulp-uglifycss/issues/15).

If you are allowing major or minor version updates in your packages.json via ^ or ~, remove those characters thoughout the file and try another npm install. If it works that time then you'll be alright after you have the fun of narrowing down which package is causing the problem.

4
votes

I had the same issue while trying to install firebase-tools in my windows laptop. this is how i solved it.

  1. I downloaded kaspersky and installed it. then i disabled kaspersky secure connections
  2. i opened cmd and run this command npm cache clean --force
  3. i then run this command npm install npm@latest -g
  4. i then run the firebase cli command npm install -g firebase-tools
4
votes

I suggest: Switch to Yarn! - Yarn is a package manager which uses the same package.json file and node_modules folder as npm.

With npm I had the same problem: On a CentOS 6 install I got the ERR cb() never called error repeatedly and could not find a way to make npm reliably complete installation of some packages (like webpack for example). - Yarn works flawlessly, even on flaky network connections.

Migration to Yarn is easy. Most subcommands are the same. They have a good Migration guide. Read on to the handy CLI commands comparison at the end.

4
votes

For Ubuntu Users, the given below method worked for me.

Firstly, perform this : sudo npm cache verify

Then go to Home->.npm and delete the _cache folder by : sudo rm -rf _cacache/

go and check, maybe you found the solution.

4
votes

I too faced the same problem today as I force stopped the npm package download in between due to internet issues.

I tried various things like,

  1. Running sudo npm cache clean -f - which did not work as expected
  2. Clean uninstalling node and reinstalling it - which as well didn't work

I finally tried to delete the folder containing the npm cache that was creating the problem. I ran the following command,

sudo rm -rf /Users/{user_system_user}/.npm/

Then I tried installing the package that was stuck and everything worked like a charm.

P.S: replace {user_sytem_user} according to the current user of your system.

4
votes

I have the same error in my project. I am working on isolated intranet so my solution was following:

  • run npm clean cache --force
  • delete package-lock.json
  • in my case I had to setup NPM proxy in .npmrc
3
votes

In my case i couldnt install a VueJS plugin and i had to:

Changing the ownership of files:

sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) /usr/local/lib
sudo chown -R $(whoami) /usr/local/bin

And then made sure to ahve latest npm:

npm install -g npm@latest

Then installed my plugin and in your case probably your command isntead.

3
votes

What worked for me was: delete the package-lock.json file and run the following command:

npm cache clean --force

3
votes

Try switching your network, somehow switching network worked for me.

I have tried many things mentioned in other answers, like:

  1. npm cache clean --force
  2. Delete existing node_modules, delete package-lock.json, and reinstall using - npm i
  3. npm cache verify
  4. npm clean-install

None of the above worked for me, might work for you. Try your luck.

3
votes

If the bug persists even after running npm cache clean --force, try to rerun npx create-react-app your_app_name after switching to a different network. This error could also cause due to slow and unstable networks...