首页 > 解决方案 > Express + Typescript + React:错误:ENOENT:没有这样的文件或目录,stat'/app/frontend/build/index.html'?

问题描述

我在ts中有这个快递服务器,这是转换后的js,代码:

class App {
    constructor() {
        this.app = express();
        ...
        this.config();
        ...
    }
    config() {
        if (process.env.NODE_ENV === 'production') {
            // Serve any static files
            this.app.use(express.static(path.join(__dirname, '../../frontend/build')));
            // Handle React routing, return all requests to React app
            this.app.get('*', (req, res) => {
                res.sendFile(path.join(__dirname, '../../frontend/build', 'index.html'));
            });
        }
    }
}
exports.default = new App().app;

但我在heroku上收到此错误:

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

我检查了 heroku bash 上的目录并在那里构建,这不是我第一次部署应用程序,但这次是打字稿,我习惯了 javascript,我想这可能是不同的?我 100% 确定该文件夹正确地定位在 config() 上。帮助?

标签: reactjstypescriptexpress

解决方案


TypeScript 不会将未主动编译的文件复制到目标目录,例如资产和模板文件。

我怀疑它index.html没有被复制到您的代码解析绝对路径的输出目录res.sendFile(...)

您可能希望将这些文件移动到 TypeScript 编译过程未触及的单独目录中。或者,实现一个gulporgrunt任务,以递归方式将所有非 JavaScript、非 JSON 和非 TypeScript 文件复制到 TypeScript 输出文件夹,以便正确解析所有相对路径。

该线程可能会对您有所帮助:Angular 2 + Typescript 编译器复制 html 和 css 文件


推荐阅读