我在Heroku中运行一个简单的测试站点时遇到了麻烦.出于某种原因,当我希望它从/ build /服务时,它正试图从/ app/build /提供内容.
错误:ENOENT:没有这样的文件或目录,stat'/app/build/index.html'
我在这里读到不要在快递应用程序中使用__dirname,因为Heroku将它设置为/ app并且我应该使用process.cwd();
process.env.PWD = process.cwd();
Run Code Online (Sandbox Code Playgroud)
但它没有用.下面是我的server.js表达app和文件夹结构
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');
Run Code Online (Sandbox Code Playgroud)
hun*_*tis 22
首先,不要使用PWD.只需使用__dirname.它适用于Heroku,就像它在任何其他地方一样.例如,如果您从非本地目录执行二进制文件,则使用PWD会使您的应用程序更加脆弱.
其次,Heroku上不存在文件的原因可能是因为您已将其添加到.gitignore文件中或通常未将其检入git.您可以从编辑器的颜色编码中看到这一点 - 检入git的所有文件都是白色,忽略的文件是灰色的(如node_modules目录和build/bundle).您的索引文件为红色(不像签入文件那样白色).所以,当你git push heroku master,那些你引用的文件不存在.
最后,ENOENT说/ app/build的原因只是因为Heroku上的root/home目录是/ app.永远不要构建锁定在绝对文件结构中的应用程序; 只使用相对路径(否则,如果您将应用程序移动到本地计算机上的另一个目录,您的应用程序将会中断).
app.get('*', function (req, res) {
const index = path.join(__dirname, 'build', 'index.html');
res.sendFile(index);
});
Run Code Online (Sandbox Code Playgroud)
小智 7
dist文件夹被忽略.因此heroku返回此错误.当您在heroku中列出您的应用程序文件时,您可以看到它丢失了.
如何在heroku中列出文件夹/文件
| 归档时间: |
|
| 查看次数: |
17960 次 |
| 最近记录: |