Node.js Heroku Deployment on Mac - sh:1:nodemon:404 Not Found!`nodemon fileName.js` / npm错误!在...开始脚本处失败

92vpleto  于 2023-05-06  发布在  Node.js
关注(0)|答案(4)|浏览(111)

使用MacHeroku上部署Node.js

我的问题:

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

在使用React创建前端、使用node.js/express.js创建后端服务器以及使用PostgreSQL创建数据库之后,我尝试使用GitHeroku上部署服务器。因为我已经有了Git,所以我移到了Heroku CLI

  • 首先,从我的服务器中的terminal…*
brew install heroku/brew/heroku
heroku create
git remote -v
git push heroku master
  • 如果您不是第一次使用Heroku... *
heroku git:remote -a theUrlYouWant
git push heroku master
  • ...否则...Heroku会动态地为应用分配一个端口,因此您无法将端口设置为固定数目。Heroku将端口添加到env:*
app.listen(process.env.PORT || 3000, () => {  
  console.log(`app is running on port ${process.env.PORT}`);
})
  • ...如果您添加了端口:*
git add .
git commit -m "adding port"
git push heroku master
  • ...最后,从我的终端在服务器:*
➜ 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! app@1.0.0 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 app@1.0.0 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
lhcgjxsq

lhcgjxsq1#

Heroku默认运行在生产环境中,因此它不安装开发依赖项。
如果你不想重新安装nodemon作为一个依赖,我认为你不应该,因为它的正确位置是在devDependencies,而不是在依赖...
相反,您可以在package.json中创建第二个npm脚本,通过仅在本地主机中运行nodemon来避免此错误:

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

当你想在本地运行这个项目时,只要在你的终端npm start:dev中运行,它就会用nodemon加载fileName.js
在Heroku中,npm start默认运行,并从普通节点命令加载fileName.js,您可以消除该错误。

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]: > app@1.0.0 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

我写这篇文章是希望能帮助你避免我花在调试这个问题上的时间。

lnlaulya

lnlaulya2#

以下是对我有效的方法:
在Heroku应用程序中,转到Settings,然后单击Reveal Config Vars,然后添加新记录KEYNPM_CONFIG_PRODUCTIONValuefalse

8oomwypt

8oomwypt3#

我在package.json中添加了nodemon的依赖项,它现在可以工作了。

"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"
  }
xzv2uavs

xzv2uavs4#

TL;DR

  • 定义两个用于运行应用程序的命令,一个用于本地开发,一个用于生产。
之前

“start”:nodemon fileName.js

之后

“start”:node fileName.js
“dev”:nodemon fileName.js
要在本地运行,请运行npm run dev以启动应用程序,而不是npm run start

说明

**“dependencies”:**已安装在生产环境中,这意味着它们将在您的生产环境中
“devDependencies”:

  • 都是为了当地的发展,这些都不包括在生产中
  • “devDependencies”:{“nodemon”:“^2.0.21”,}
  • 这里nodemon是一个开发依赖项,不包含在您的生产中,因为nodemon用于热加载本地应用程序,所以它是有意义的。

相关问题