从字面上看,我已经为这个错误苦苦挣扎了近三个星期,老实说,这使我发疯。我已经使用Heroku部署我的项目已有一年多了,在发布这个新网站之前,我从未遇到过任何错误。您会看到,当我的完整React项目位于名为client的文件夹中时,我当前在我的node项目中安装了一个名为“ index.js”的邮件服务器。
if (process.env.NODE_ENV === 'production') {
app.use(express.static('client/build'));
const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}
但是每次我按下Heroku时,都会在控制台中收到以下错误消息:
Error: ENOENT: no such file or directory, stat '/app/client/build/index.html'
我也一直在尝试更改和修改路径中的目录,以查看是否有任何更改。我也仔细研究了整个互联网,找到了这个问题的潜在解决方案,但没有任何运气。如果有人至少可以指出我在这里似乎做错的正确方向,我将万分感谢。
谢谢。
答案 0 :(得分:1)
我只是遇到了同样的问题。您需要在package.json中添加一个heroku-postbuild
脚本。我在项目中使用了create-react-app,因此,如果您没有做这行,可能会有所不同:
"heroku-postbuild": "cd client && npm install --only=dev && npm install && npm run build"
当我运行npm run build
时,create-react-app会编译build /文件夹中的缩小的index.html文件,因此,如果您指向的构建文件位于其他位置,则可能需要修改命令。 / p>
我的服务器结构如下:
server.js
client/
build/
public/
- index.html
src/
- index.js
中找到了解决方案
答案 1 :(得分:1)
我遇到了同样的错误,但我的问题不是上述问题,所以我决定将其发布在这里 - 也许可以帮助某人。
我想部署我当前的工作分支,它不是 master,但是在运行命令 git push heroku master
时,我没有意识到默认部署的分支是 master。由于我在一些提交中领先于 master,包括在新位置连接我的 server.js 文件,heroku 无法找到它。
所以实际上我的解决方案就像运行 git push heroku <current-branch-name>:master
一样简单,现在一切正常。
答案 2 :(得分:0)
我在一个带有NodeJS和Express的React工程中也遇到了同样的情况。在我有NodeJS文件的文件夹中(因此不在客户端文件夹中,React所在的文件夹中),我在package.json中是这样的:
"scripts": {
"start": "node server.js",
"server": "nodemon server.js",
"client": "npm start --prefix client",
"client-install": "npm install --prefix client",
"dev": "concurrently \"npm run server\" \"npm run client\"",
"heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build --prefix client"
},
在server.js中,我有:
// Serve static assets in production
if (process.env.NODE_ENV === 'production') {
// Set static folder
app.use(express.static('client/build'));
app.get('*', (request, response) => {
response.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}
在同一文件夹(NodeJS)中,有一个供Mongo用户使用的文件production.js并通过:
module.exports = {
mongoURI:
'mongodb+srv://yyyyyyyyy:xxxxxxxx@cluster0-pana5.mongodb.net/test?retryWrites=true&w=majority',
};
所以在server.js中,我带了这个文件:
const db = require('./config/production').mongoURI;
仍然在这里,使用db连接到MongoDB:
mongoose
.connect(db, {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false
})
// use a promise to check if success
.then(() => console.log('MongoDB Connected!'))
.catch(error => console.log('MongoDB did not connect: ', error));
对我来说就是这样。
答案 3 :(得分:-1)
没有使用Heroku,我想问题是“ /app/client/build/index.html”。
真的在/ app /下吗?也许您应该使用类似的相对路径:
app/client/build/index.html