我无法在 Heroku 中运行一个简单的测试站点。出于某种原因,当我希望它从 /build/ 提供内容时,它试图从 /app/build/ 提供内容。
错误:ENOENT:没有这样的文件或目录,stat ‘/app/build/index.html’
我 在这里 读到不要在 express 应用程序中使用 __dirname,因为 Heroku 将其设置为 /app 并且我应该使用 process.cwd();
process.env.PWD = process.cwd();
但它没有用。下面是我的 server.js express 应用程序和文件夹结构
const path = require('path');
const express = require('express');
const port = process.env.PORT || 8080;
const app = express();
process.env.PWD = process.cwd();
app.use(express.static(process.env.PWD + '/build'));
app.get('*', function (req, res) {
const index = path.join(process.env.PWD, '/build/index.html');
res.sendFile(index);
});
app.listen(port);
console.log('server_started');
原文由 screenm0nkey 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,不要使用 PWD。只需使用 __dirname。它在 Heroku 上的工作方式与在其他任何地方的工作方式完全相同。例如,如果您从非本地目录执行二进制文件,则使用 PWD 会使您的应用程序更加脆弱。
其次,该文件在 Heroku 上不存在的原因可能是因为您已将其添加到 .gitignore 文件中,或者通常没有将其签入 git。您可以从编辑器的颜色编码中看到这一点 - 所有签入 git 的文件都是白色的,被忽略的文件是灰色的(如 node_modules 目录和 build/bundle)。您的索引文件是红色的(不像签入的文件那样是白色的)。因此,当您
git push heroku master
时,您引用的那些文件不存在。最后,ENOENT 之所以说 /app/build 只是因为您在 Heroku 上的根/主目录是 /app。永远不要构建锁定在绝对文件结构中的应用程序;只需使用相对路径(否则,即使您将其移动到本地计算机上的另一个目录,您的应用程序也会中断)。