Mac 上的 Node.js Heroku 部署 - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js`/npm 错误!在...启动脚

Posted

技术标签:

【中文标题】Mac 上的 Node.js Heroku 部署 - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js`/npm 错误!在...启动脚本失败【英文标题】:Node.js Heroku Deployment on Mac - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js` / npm ERR! Failed at the...start script 【发布时间】:2019-09-26 14:45:11 【问题描述】:

部署在 HerokuNode.js 上使用 Mac

我的问题:

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 的数据库之后,我尝试使用@987654330 在Heroku 上部署我的服务器@。因为我已经有了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  

【问题讨论】:

嗨!鼓励在 SO 上写下您自己回答的问题,所以感谢您这样做!但是,您应该将问题和答案分开。所以请删除问题的答案部分,然后将其作为答案发布......这个问题!谢谢,欢迎来到 SO :) 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

这对我有用:

在您的 Heroku 应用程序中,转到 Settings,然后单击 Reveal Config Vars,然后使用 KEY NPM_CONFIG_PRODUCTIONValue false 添加新记录。

【讨论】:

【参考方案3】:

Heroku 默认在生产环境中运行,因此它不会安装开发依赖项。

如果您不想将 nodemon 作为依赖项重新安装,我认为您不应该这样做,因为它的正确位置是在 devDependencies 中,而不是在依赖项中...

相反,您可以在 package.json 中创建第二个 npm 脚本,通过仅在本地主机中运行 nodemon 来避免此错误:

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

当您想在本地运行项目时,只需在终端中运行npm start:dev,它就会加载fileName.jsnodemon

在 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

我发布这篇文章是为了帮助您避免花费我调试此问题的时间。

【讨论】:

完美!现在,一旦(我认为是 10 小时?)时间段过后,您可以接受您的答案,请记住这样做。 一点更新,Heroku 确实安装了 dev 依赖项,但在构建后对其进行了修剪;因此您可以使用您的开发依赖项来构建您的应用程序;即:“脚本”:“安装”:“babel src/app.js --out-file build/app.js”

以上是关于Mac 上的 Node.js Heroku 部署 - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js`/npm 错误!在...启动脚的主要内容,如果未能解决你的问题,请参考以下文章

Heroku cedar 堆栈上的 Node.js 端口问题

使用 Compass + Sass Foundation 3 部署 Node.js 的 Heroku

Node.js Heroku 应用程序上的 TCP 连接

Node.js 应用程序无法部署到 Heroku

部署 Node.js 应用程序时出现 Heroku 错误

heroku node.js bash:节点:找不到命令