Загрузчик файлов Webpack не загружает папку с ресурсами в производственной сборке - PullRequest
3 голосов
/ 06 августа 2020

Я развернул свою сборку приложения для реагирования в Webpack в netlify. Я вижу, что CSS, шрифты и все остальное загружаются нормально, но не изображения в папке assets / images.

Вот моя структура папок в исходном пути живого сайта:

image

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 изображение отображается на живом сайте.

enter image description here

Here's my folder structure in local:

введите описание изображения здесь

То же в локальном работает нормально. Не уверен, что вызывает проблему в продукте. Я знаю, что что-то не так с моим путем к загрузчику файлов. Но не уверен, где исправить.

Есть предложения, пожалуйста?

1 Ответ

3 голосов
/ 06 августа 2020

Вам нужно скопировать файлы изображений в каталог сборки.

Для этого установите плагин копирования веб-пакетов: copy-webpack-plugin

npm install copy-webpack-plugin --save-dev

И конфигурация веб-пакета должна быть:

// import copy plugin
const CopyPlugin = require('copy-webpack-plugin');

module.exports = {
    entry: ['./src/index.js', '@babel/polyfill'],
    module: {

       ...

    },
    plugins: [

        ...

        new CopyPlugin({
            patterns: [
                {
                    from: path.resolve(__dirname, '/src/assets/images'),
                    to: path.resolve(__dirname, 'dist')
                }
            ]
        }),
     ]
};

Подробнее https://www.npmjs.com/package/copy-webpack-plugin

...