Node.js Heroku Deployment on Mac - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js` / npm ERR! Failed at the...start script

11,126

Solution 1

Heroku runs in a production environment by default so it does not install the dev dependencies.

If you don't want to reinstall nodemon as a dependency, which I think you shouldn't, because it's right place is in devDependencies, not in dependencies...

Instead, you can create a second npm script, in your package.json, to avoid this error by running nodemon only in your localhost:

"scripts": {
    "start": "node fileName.js",
    "start:dev": "nodemon fileName.js"
},  

And when you want to run the project locally, just run in your terminal npm start:dev and it will load fileName.js with nodemon.

While in Heroku, npm start runs by default and loads fileName.js from a normal node command and you get rid of that error.

2019-05-08T18:13:40.319989+00:00 heroku[web.1]: State changed from crashed to starting  
2019-05-08T18:13:41.000000+00:00 app[api]: Build succeeded  
2019-05-08T18:13:42.658048+00:00 heroku[web.1]: Starting process with command npm start  
2019-05-08T18:13:44.644005+00:00 app[web.1]: 
2019-05-08T18:13:44.644025+00:00 app[web.1]: > [email protected] start /app  
2019-05-08T18:13:44.644027+00:00 app[web.1]: > node fileName.js  
2019-05-08T18:13:44.644028+00:00 app[web.1]:   
2019-05-08T18:13:45.158694+00:00 app[web.1]: app is running on port 33333  
2019-05-08T18:13:46.293205+00:00 heroku[web.1]: State changed from starting to up  
2019-05-08T18:13:47.788861+00:00 heroku[router]: at=info method=GET path="/" host=yourURL.herokuapp.com request_id=hidden fwd="ip" dyno=web.1 connect=0ms service=11ms status=200 bytes=245 protocol=https

I made this post in hopes to help you avoid the time it took me to debug this issue.

Solution 2

Here`s what worked for me:

In your Heroku app, go to Settings, then click Reveal Config Vars and then add a new record with KEY NPM_CONFIG_PRODUCTION and Value false.

Solution 3

I added nodemon to the dependencies in package.json and it is working now.

 "dependencies": {
    "bcrypt-nodejs": "0.0.3",
    "clarifai": "^2.9.1",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "knex": "^0.95.4",
    "pg": "^8.6.0", 
    "nodemon": "^2.0.7"
  }
Share:
11,126
Q.McKinley
Author by

Q.McKinley

Updated on June 05, 2022

Comments

  • Q.McKinley
    Q.McKinley almost 2 years

    Deploying on Heroku with Node.js using Mac

    My issue:

    State changed from starting to crashed &&  
    sh: 1: nodemon: not found &&  
    Failed at...start script &&
    status 1...code=H10
    

    After creating my front-end, with React, back-end server, with node.js/express.js, and database, with PostgreSQL, I attempted to deploy my server on Heroku with Git. Since I already had Git, I moved onto Heroku CLI

    First, from the terminal in my server...

    brew install heroku/brew/heroku
    heroku create
    git remote -v
    git push heroku master
    

    If this is not your first time using Heroku...

    heroku git:remote -a theUrlYouWant
    git push heroku master
    

    ...otherwise...Heroku dynamically assigns your app a port, so you can't set the port to a fixed number. Heroku adds the port to the env:

    app.listen(process.env.PORT || 3000, () => {  
      console.log(`app is running on port ${process.env.PORT}`);
    })  
    

    ...if you added port:

    git add .
    git commit -m "adding port"
    git push heroku master
    

    ...finally, from my terminal in server:

    ➜ folderName git:(master) heroku open  
    ➜ folderName git:(master) heroku logs --tail
    
    2019-05-08T18:07:23.253827+00:00 heroku[web.1]: Starting process with command npm start  
    2019-05-08T18:07:25.323748+00:00 heroku[web.1]: State changed from starting to crashed  
    2019-05-08T18:05:17.074233+00:00 app[web.1]: > nodemon fileName.js  
    2019-05-08T18:05:17.074235+00:00 app[web.1]:   
    2019-05-08T18:05:17.098124+00:00 app[web.1]: sh: 1: nodemon: not found  
    2019-05-08T18:05:17.102512+00:00 app[web.1]: npm ERR! file sh  
    2019-05-08T18:05:17.102801+00:00 app[web.1]: npm ERR! code ELIFECYCLE  
    2019-05-08T18:05:17.103068+00:00 app[web.1]: npm ERR! errno ENOENT  
    2019-05-08T18:05:17.103239+00:00 app[web.1]: npm ERR! syscall spawn    
    2019-05-08T18:05:17.104259+00:00 app[web.1]: npm ERR! [email protected] start: nodemon fileName.js  
    2019-05-08T18:05:17.104361+00:00 app[web.1]: npm ERR! spawn ENOENT  
    2019-05-08T18:05:17.104553+00:00 app[web.1]: npm ERR!  
    2019-05-08T18:05:17.104692+00:00 app[web.1]: npm ERR! Failed at the [email protected] start script.  
    2019-05-08T18:05:17.104841+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 
    
    [...]
    
    2019-05-08T18:05:17.171915+00:00 heroku[web.1]: Process exited with status 1  
    2019-05-08T18:05:37.338695+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=yourURL.herokuapp.com request_id=hidden fwd="ip" dyno= connect= service= status=503 bytes= protocol=https  
    
  • Max von Hippel
    Max von Hippel almost 5 years
    Perfect! Now once the (I think 10 hour?) time period passes after which you are allowed to accept your answer, remember to do so.
  • 2oppin
    2oppin over 2 years
    a little update, Heroku does install dev dependencies, but pruning it after the build; so you can use your dev dependencies to build your app; i.e: "scripts":{"install": "babel src/app.js --out-file build/app.js"}