SDG
SDG

Reputation: 183

Heroku: Cannot find module 'mongodb'

OK, I have an express app which is throwing this error at launch when deployed to Heroku. The app compiles and runs fine locally:

    Cannot find module 'mongodb'

This app was running until I redeployed it yesterday ... here is my package.json which was unchanged

    {
     "name": "fitness-tracker",
     "version": "0.0.0",
     "private": true,
     "scripts": {
       "start": "node ./bin/www"
     },
     "dependencies": {
       "express": "~4.9.0",
       "body-parser": "~1.8.1",
       "cookie-parser": "~1.3.3",
       "promise": "~6.0.1",
       "morgan": "~1.3.0",
       "serve-favicon": "~2.1.3",
       "debug": "~2.0.0",
       "mongodb-core": "*",
       "mongoskin": "~2.0.0",
       "express-handlebars": "~1.1.0",
       "moment": "~2.0.0",
       "moment-timezone": "^0.3.1",
       "q": "~1.0.1",
       "compass": "~0.1.0",
       "apm": "*"
     },
     "devDependencies": {
       "moment-timezone": "^0.3.1"
     }

Ideas?

Upvotes: 0

Views: 1123

Answers (2)

Manuel
Manuel

Reputation: 15042

Also always worth a try: disable the Heroku build cache to recreate the node_modules directory.

In the Heroku CLI write:

$ heroku config:set NODE_MODULES_CACHE=false
$ git commit -am 'disable node_modules cache' --allow-empty
$ git push heroku master

As described here.

Upvotes: 0

Vikram Tiwari
Vikram Tiwari

Reputation: 3895

So the issue was package's resolution based on node version. Since NodeJS is rapidly evolving, it's a good practice to include engines specification in your package.json.

When doing automatic deployments on various cloud providers, this helps them to use only specified node & npm version. This was all the packages that get fetches are built for that node version hence less chances of app to misbehave.

Read more: https://docs.npmjs.com/files/package.json#engines

Upvotes: 2

Related Questions