我在使用Heroku部署时在日志中收到以下错误,我该怎么办?
我的procfile
:
web: node bin/www
我的package.json
:
{
"name": "express-generator",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "./node_modules/.bin/nodemon.cmd ./bin/www"
},
"dependencies": {
"config": "^3.3.1",
"cookie-parser": "~1.4.4",
"cors": "^2.8.5",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-errors": "~1.6.3",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.9.29",
"morgan": "~1.9.1",
"passport": "^0.4.1",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
"passport-local-mongoose": "^6.0.1",
"pug": "^3.0.0"
},
"devDependencies": {
"nodemon": "^2.0.4"
}
}
3条答案
按热度按时间izkcnapc1#
Nodemon是一个开发工具,不应该在生产中使用:
Nodemon是一个实用程序,它将监视源代码中的任何更改并自动重新启动服务器。非常适合发展。
在Node.js项目中,如果Heroku找不到
Procfile
,它会默认运行start
脚本。您的start
脚本是看起来你是在 * 尝试 * 使用Node.js而不是Nodemon,把它放在你的
Procfile
中:但看起来这个文件命名不正确。大写的
P
很重要。转换为Procfile
,例如运行git mv procfile Procfile
。然后提交更改并重新部署。请注意,您也可以像Heroku一样使用
heroku local
命令在本地运行应用程序,以确保Procfile
正在执行它应该执行的操作。ac1kyiln2#
你不应该在“生产”中使用nodemon,而应该使用node。同样在你的
package.json
中,nodemon被声明为一个dev依赖项,所以它不会通过npm安装在你的heroku示例上,因为我认为npm install --production
将由heroku执行,所以如果你在启动脚本中调用它,它不会找到它。"start": "node index.js"
例如,如果index.js是你的入口点。因为heroku默认使用start脚本来启动你的程序。"dev": "nodemon index.js"
中使用nodemon例如,如果index.js是你的入口点,那么你可以通过在终端中键入npm run dev
来启动nodemon应用程序ttvkxqim3#
首先,请遵循这里其他人的建议:
nodemon
不应用于生产。把它留给开发机器,直接在prod上运行node ./bin/www
。例如,在一个示例中,
现在谈谈你的问题。
nodemon
将其可执行文件安装到node_modules/.bin/
中。它为不同的操作系统安装可执行文件:nodemon
和用于Linux的Bash语法,nodemon.cmd
和nodemon.ps1
用于Windows(CMD和PowerShell)。"start": "./node_modules/.bin/nodemon.cmd ./bin/www"
对于Windows来说是非常好的(看起来你是用它来开发的-我想它是有效的:)但是对于Linux服务器(Heroku在您的案例中提供了),
nodemon.cmd
不是一个选择。️如果你真的想在Linux上运行它,请执行
"start": "nodemon ./bin/www"
。️但是你不应该在prod上做:)
Linux可能没有为
./node_modules/.bin/nodemon
设置正确的权限:它可以通过以下方式修复: