React / Express - 错误:ENOENT:没有这样的文件或目录,stat '/app/build/index.html'

Posted

技术标签:

【中文标题】React / Express - 错误:ENOENT:没有这样的文件或目录,stat \'/app/build/index.html\'【英文标题】:React / Express - Error: ENOENT: no such file or directory, stat '/app/build/index.html'React / Express - 错误:ENOENT:没有这样的文件或目录,stat '/app/build/index.html' 【发布时间】: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'));
);

【问题讨论】:

这是否与***.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@ 【参考方案1】:

我从来没有发现问题,所以我缩小了规模并再次尝试。最终,我认为您甚至不需要引用 index.html 文件。在根级别我有 server.js。在该文件中,我只是在路由文件之后引用客户端/构建,这作为路由中未找到的任何内容的默认值:

app.use(express.static("client/build"));

【讨论】:

【参考方案2】:

我希望这能帮助其他人解决这个问题。我本周遇到了这个错误,我解决了它。就我而言,它与 client/build/index.html 路径无关。我敢打赌,你的情况也是如此。

请大家多多包涵,先过一下这几点,看看问题出在哪里:

问题在于,当您创建 react 应用程序时,它会以某种方式自动运行 git init 命令。您最终会得到 2 个 git 文件夹:一个用于 Express 后端,另一个用于您的 react 客户端文件夹。 结果是,当您提交更改时,客户端文件夹中的更改不会被推送到 heroku。

要说服自己确实是这种情况,请在项目根目录下的终端中运行以下命令:

a) heroku run bash

b) cd into the client folder

c) ls client

如果在这个阶段您看不到客户端文件夹的内容,那么这就是导致问题的原因。

现在是补救措施:

转到您的终端并运行这些命令(来源:Content of create-react-app is not pushed in github)

mv client subfolder_tmp
git submodule deinit client
git rm --cached client
mv subfolder_tmp client
git add client

现在在您的客户端文件夹中进行更改,然后将它们推送到 heroku (git add . , git commit -m "", git push heroku master)

如果这有帮助,请告诉我,我知道我通过这种方式解决了我的问题。

【讨论】:

以上是关于React / Express - 错误:ENOENT:没有这样的文件或目录,stat '/app/build/index.html'的主要内容,如果未能解决你的问题,请参考以下文章

React / Express - 错误:ENOENT:没有这样的文件或目录,stat '/app/build/index.html'

使用 express-graphql 和 react-apollo 处理错误

节点无法在 Express/react 应用程序中查找视图“错误”

在 React/Express 中使用 PassportJS 进行 Google OAuth 时出现 CORS 错误

处理 CRUD 应用程序中的重复值错误(react-redux + express-mongoose)

React Express Fetch Post CORS 错误:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态