反应构建资产表达静态文件夹不服务错误es6

Posted

技术标签:

【中文标题】反应构建资产表达静态文件夹不服务错误es6【英文标题】:react build assets express static folder not serving error es6 【发布时间】:2021-03-12 09:57:42 【问题描述】:

您好,我正在尝试从我的静态文件夹中以 express 提供 react 构建资产,它使用 CommonJS 语法。现在我使用 ES6 语法和 express,它不服务于其他文件,但它服务于 index.html 文件:

GET /?session_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImI4Y2QxNTA0LTg3YmEtNGMzMC04ZmI3LWFhZDFkZWQ0ZmFkNCIsImlhdCI6MTYwNjczODExMiwiZXhwIjoxNjA2NzQxNzEyfQ.m4Lf5mimxD_8r14bT_Npg2Ql_ZkiJrFoy6mDfdkx2Sw 200 15.099 ms - 3011
GET /static/css/main.3dccf1f1.chunk.css 404 3.406 ms - 173
GET /static/js/2.0216aaa2.chunk.js 404 1.833 ms - 168
GET /static/js/main.71c89386.chunk.js 404 17.247 ms - 171
GET /manifest.json 404 0.543 ms - 152

这是我在 app.js 中的代码

import express from 'express';
import session from 'express-session';
import dotenv from 'dotenv';
import morgan from 'morgan';
import path from 'path';
import socketListen,socketIO from './socket/init.js';

dotenv.config(path: './config/config.env');

import authController from './controllers/authController.js';


const app = express();

app.use(express.json());
app.use(express.urlencoded(extended: false));
app.use(session(
    resave: false,
    saveUninitialized: false,
    secret: process.env.SECRET_KEY,
    cookie: secure: true
));
app.use(morgan('dev'));
//app.use(express.static(path.join(path.dirname(new URL(import.meta.url).pathname),'public')));
app.use(express.static((path.dirname(new URL(import.meta.url).pathname) + '/public')));
app.use('/api/v1/auth',authController);


const port = process.env.PORT || 5000;

app.get(['/','/nw','/nw/*'],(req,res) => 
    //res.sendFile(path.join(path.dirname(new URL(import.meta.url).pathname),'public','index.html'));
    res.sendFile('index.html',root: 'public');
);

socketListen(4000);

socketIO.on('connect',async() => 
    console.log('crypto client connected');
);

socketIO.on('event',async() => 

);

socketIO.on('disconnect',async() => 
    console.log('crypto client disconnected');
);


app.listen(port, () => console.log(`server is running on port $port`));

这是我的文件结构:

nano_wall
 - app.js
 - /public
     - /static
     - /assets
     - index.html
     - asset-manifest.json
     - manifest.json
     - favicon.ico

我使用 path.join 和 path.dirname(new URL(import.meta.url).pathname 来替换 ES6 的 __dirname,虽然 import.meta.url 代码替换了 __dirname,但它似乎没有正确注册使用 express.static(),所以我使用了 root: 'public' 配置选项。

【问题讨论】:

【参考方案1】:

所以我在玩 express.static 并查看了 serve-static index.d.ts 文件一分钟,我发现有一个 dotfiles 配置选项,您可以在其中决定如何在前面处理 ./文件路径,但我只是使用了“公共”,它似乎可以正常显示。

【讨论】:

以上是关于反应构建资产表达静态文件夹不服务错误es6的主要内容,如果未能解决你的问题,请参考以下文章

使用 png 优化的静态资产转储引用了错误的文件

从 django 静态文件提供服务并上传到 heroku 时无法找到反应静态文件

使用 ES6 类反应静态

使用 Webpack 提供静态图像

反应路由器,nginx,节点,静态文件

在现有的谷歌云静态存储桶中反应“下一个开始”