我已经构建了我的第一个完整的 React 应用程序,它运行良好。我加载了我的开发服务器,一切都完全按照我的希望加载。值得注意的是,我的图像文件加载完美。
在我的开发服务器上成功加载图像的示例:
<img src='./img/sq/filename.jpg' />
运行开发服务器时,当我在控制台中检查此元素并转到“源”时,我看到的文件树如下所示:
- localhost:3333
- css [folder]
- js [folder]
- img/sq [folder]
- filename.jpg
- index [file]
这是我所期望的。
但是,在运行生产服务器时,图像无法加载。当我检查元素并转到“来源”时,我看到的是:
- localhost:3000
- static [folder]
- css [folder]
- js [folder]
- index [file]
所以我的生产版本显然/img/sq
完全忽略了该文件夹。
我听说过 file-loader 和 url-loader,但我还没有找到一个清晰简单的解释来说明它们的作用以及如何使用它们。我已经成功地安装了我的依赖项,并且我已经将此加载程序添加到我的 webpack.config.js 文件中:
{
test: /\.(jpe?g|png|gif|svg)$/i,
loaders: [
'file?hash=sha512&digest=hex&name=[hash].[ext]',
'image-webpack?bypassOnDebug&optimizationLevel=7&interlaced=false'
]
}
这样做之后,我不确定这应该如何改变图像的加载方式。我应该更改引用图像的方式吗?任何帮助/指针将不胜感激,因为这让我很难过。
更新:
这是我的 server.js 文件。我看不出您发布的代码与我自己的代码之间有任何根本区别,除了我使用res.render
方法,您的res.sendFile
.
这里有什么我可能错过的吗?
服务器.js
var express = require('express')
var app = express();
app.use('/static', express.static(__dirname + '/static'));
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('*', function (req, res) {
res.render("index");
});
const port = process.env.PORT || 3000;
const env = process.env.NODE_ENV || 'production';
app.listen(port, err => {
if (err) {
return console.error(err);
}
console.info(`Server running on http://localhost:${port} [${env}]`);
});