【发布时间】:2020-08-06 02:09:45
【问题描述】:
我已经在 netlify 中部署了我在 Webpack 中构建的 react 应用程序。我看到 CSS、字体和其他所有内容都加载正常,但不是 assets/images 文件夹下的图像。
这是我在实时站点源路径中的文件夹结构:
我的 webpack.config.js:
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: ['./src/index.js', '@babel/polyfill'],
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-react', '@babel/preset-env'],
},
},
},
{
test: /\.css$/i,
exclude: /node_modules/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: true,
},
},
],
},
{
test: /\.(gif|png|jpe?g)$/,
use: [
{
loader: 'file-loader',
options: {
// name: '[name].[ext]',
// name: '[path][name].[hash].[ext]',
name: '/src/assets/images/[hash].[ext]',
// outputPath: 'src/assets/images/',
},
},
],
},
],
},
devServer: {
host: '192.168.1.10', //your ip address,
historyApiFallback: true,
contentBase: './build',
disableHostCheck: true,
},
resolve: {
extensions: ['*', '.js', '.jsx'],
},
output: {
path: path.resolve(__dirname, '/dist'),
filename: 'bundle.js',
publicPath: '/',
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new HtmlWebpackPlugin({
filename: 'index.html',
inject: true,
template: path.resolve(__dirname, 'index.html'),
}),
],
devServer: {
contentBase: './build',
hot: true,
},
};
我尝试像这样在 JSX 中访问我的图像 -
import { HeaderLogo } from '../../assets/images/image_name.png';
当我检查元素并将路径从/assets/images/image-name.png 更改为/src/assets/images/image-name.png 时,它会在实时站点中显示图像。
这是我在本地的文件夹结构:
在本地也可以正常工作。不确定是什么导致产品出现问题。我知道我的文件加载器路径有问题。但不知道在哪里更正。
有什么建议吗?
【问题讨论】:
-
您的配置看起来不错。您是否仅在您的服务器中部署静态文件?
-
如果我没弄错的话,我会在 src/assets/images 中添加所有图像文件并构建它。我正在从那里访问图像,而不是从任何其他服务器。在生成的 ./dist 文件夹中,我看到了资产。但不是通过 netlify 部署时
-
我的意思是您是否在您的服务器中通过
dist/index.html为您的网站提供服务?这意味着服务器根目录是dist目录,因此当您请求具有公共路径的资产时,就像yourDomain/assets/image/logo.png一样。 -
是的,我看到该站点是从 dist/index.html 提供的。但是,我不想将所有图像 src 路径更改为 yourDomain/assets/image/logo.png,这是一个痛苦的过程。我怀疑是否某些东西在本地使用相同的路径,配置中的一些更改会使它在产品中工作吗?或者每次部署时,我应该将其更改为公共路径吗?
-
这里是我目前面临这个问题的网站 - frosty-colden-75f287.netlify.app/#
标签: javascript reactjs webpack netlify webpack-file-loader