【发布时间】:2021-04-26 05:11:31
【问题描述】:
请参阅下面的修改 请让我摆脱这里的痛苦。我花了几个小时浏览文档并尝试在此站点上找到的不同方法。当 heroku 从 github 提取代码后尝试构建时出现此错误:
错误:ENOENT:没有这样的文件或目录,stat '/app/build/index.html'
我的客户端代码位于根目录,我的快速服务器代码位于 /server。
节点正在从根 package.json 启动(例如 node server/index.js)。
如果我 bash 进入 heroku,我可以看到 /build/index.html 文件。
app.use(express.static(path.resolve(__dirname, '../build')));
app.get('*', (req, res) => {
res.sendFile(path.resolve('build/index.html'));
});
编辑
其他有趣的东西。如果我像这样设置路径,我可以在 localhost:5000 上的 /build 文件夹中浏览我的图像(与根目录相同的路径),但我仍然在 prod 中遇到相同的错误。
app.use(express.static(path.join(__dirname, '/../build')));
编辑 2:
事实证明,我需要添加对“public”的静态引用。啊!
我现在可以在构建目录中看到索引和其他任何内容。
但是,没有对构建期间创建的静态/js 文件的引用,因此该页面是空的。我可以在 bash 提示符下在服务器上看到它们。
app.use(express.static(path.join(__dirname, '..', 'build')));
app.use(express.static('public'));
app.use((req, res, next) => {
res.sendFile(path.join(__dirname, '..', 'build', 'index.html'));
});
【问题讨论】:
-
这是否与stackoverflow.com/a/39535945/7306148中的问题类似
-
感谢您的回复!不,在那篇文章中,问题是开发人员正在进行本地构建和命令行推送,并且由于 .gitignore 的问题而丢失了一个文件夹。我正在让 heroku 进行构建。
-
ENOENT听起来您的路径不正确。为Heroku上的应用程序提供服务的目录是什么?如果您执行path.join(__dirname, "./build/index.html")之类的操作怎么办? -
@goto1 非常感谢您的回复。该应用程序是从 app/build 提供的(与“服务器”不同,客户端代码不是一个级别),并且此代码位于 app/server.xml 中。 __dirname 确认运行时的当前目录是 app/server。 res.sendFile(path.join(__dirname, './build/index.html'));我试过这个并得到这个错误:错误:ENOENT:没有这样的文件或目录,stat'/app/server/build/index.html'。
-
@AdamCodes716 如果我理解正确,您的客户端代码在
app/build下,而您的服务器端代码在app/server下,所以您应该上一个目录,如下所示:@ 987654331@
标签: node.js reactjs express heroku