Не работает динамический импорт импорт после сборки проекта

У меня на проекте используется готовый компонент с готовым бандлом, который находится отдельно от основных используемых модулей, т.е. в отдельной папке в корне проекта, я подключаю его к package.json по ссылке и экспортирую динамически. Локально все работает без проблем, но после сборки (npm build) проекта, зайдя на страницу с этим компонентом - появляется ошибка: Loading chunk 4 failed введите сюда описание изображения Насколько я понял по понели network - у этого чанка неверно задан путь, судя ссылке в path у остальных введите сюда описание изображения Вероятно, нужно как то подправит путь для него в конфигурации webpack, но найти правильное решение не удалось, к сожалению, я не так хорош в работе с webpack. Есть ли какие-то идеи как можно подправить это? Структура проекта выглядит так: project:

  • src/
  • node_modules/
  • myCustomPackage/ - бандл здесь
  • ...others

Основной config выглядит следующим образом:

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');

const srcPath = path.join(__dirname, '../src/');
const distPath = path.join(__dirname, '../dist/');



/**
 * params: {
 *  WEBPACK_BUILD_PARAMS: {}
 * }
 */
module.exports = (params) => ({
    context: srcPath,
    entry: {
        index: ['babel-polyfill', './index.jsx'],
        admin: ['babel-polyfill', './admin.jsx'],
        user: ['babel-polyfill', './user.jsx'],
    },
    output: {
        path: distPath,
        filename: '[name].chunk.js',
        publicPath: '/',
    },
    resolve: {
        modules: ['node_modules', srcPath],
        extensions: ['.js', '.json', '.jsx', '.css', '.scss', '.ts', '.less', '.tsx'],
    },
    module: {
        rules: [
            {
                test: /\.js$|\.jsx$|\.tsx?$/,
                exclude: /node_modules/,
                loader: 'babel-loader',
            },
        ],
    },
    plugins: [
        new ForkTsCheckerWebpackPlugin({
            typescript: {
                diagnosticOptions: {
                    semantic: true,
                    syntactic: true,
                },
                configFile: '../tsconfig.json'
            },
        }),
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: 'index.html',
            templateParameters: {
                WEBPACK_BUILD_PARAMS: params.WEBPACK_BUILD_PARAMS,
            },
            chunks: ['index'],
            inject: true
        }),
        new HtmlWebpackPlugin({
            filename: 'admin.html',
            template: 'index.html',
            templateParameters: {
                WEBPACK_BUILD_PARAMS: params.WEBPACK_BUILD_PARAMS,
            },
            chunks: ['admin'],
            inject: true
        }),
        new HtmlWebpackPlugin({
            filename: 'user.html',
            template: 'index.html',
            templateParameters: {
                WEBPACK_BUILD_PARAMS: params.WEBPACK_BUILD_PARAMS,
            },
            chunks: ['user'],
            inject: true
        }),
        new webpack.ContextReplacementPlugin(
            /moment[/\\]locale$/,
            /en|zh|ru|id|ms|th/
        ),
    ]
});

Конфиг для продакшена:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const TerserJSPlugin = require('terser-webpack-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin');
const webpack = require('webpack');

const constants = require('./constants');
const WEBPACK_BUILD_PARAMS = {
    API_ORIGIN_URL: constants.API_ORIGIN_URL_PROD,
    API_SIGNALR_HUB_URL: constants.API_SIGNALR_HUB_URL,
};

const baseConfigFactory = require('./webpack.config.js');
const baseConfig = baseConfigFactory({ WEBPACK_BUILD_PARAMS });
const prodConfig = Object.assign({}, baseConfig, {});

prodConfig.mode = 'production';
prodConfig.devtool = 'hidden-source-map';

prodConfig.optimization = {
    minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
};

prodConfig.module.rules.push(
    {
        test: /\.css$|\.scss$/,
        exclude: /\.module.scss$/,
        use: [
            {
                loader: MiniCssExtractPlugin.loader,
                options: {
                    publicPath: '/public/path/to/',
                },
            },
            'css-loader',
            'sass-loader',
        ],
    },
    {
        test: /\.module\.scss$/,
        use: [
            {
                loader: MiniCssExtractPlugin.loader,
                options: {
                    publicPath: '/public/path/to/',
                },
            },
            {
                loader: 'css-loader',
                options: {
                    modules: true,
                },
            },
            'sass-loader'
        ],
    },
    {
        test: /\.(jpg|png|woff|woff2|eot|ttf)$/,
        use: {
            loader: 'file-loader',
            options: {
                name: '[name].[ext]',
                outputPath: 'assets/',
                publicPath: '/Frontend/dist/assets',
            }
        }
    },
    {
        test: /\.(pdf|exe|doc|docx|zip|xml)$/,
        use: {
            loader: 'file-loader',
            options: {
                name: '[name].[ext]',
                outputPath: 'static/',
                publicPath: '/Frontend/dist/static',
            }
        }
    },
    {
        test: /\.svg$/,
        use: [
            {
                loader: 'svg-sprite-loader',
                options: {
                    extract: true,
                    spriteFilename: '../../Frontend/dist/assets/sprite.svg',
                    publicPath: '/',
                    runtimeCompat: true
                }
            },
            {
                loader: 'svgo-loader',
                options: {
                    enforce: 'pre',
                    plugins: [
                        { removeAttrs: { attrs: '(fill|stroke)' }},
                    ]
                }
            }
        ]
    },
);

prodConfig.plugins.push(
    new MiniCssExtractPlugin({
        filename: '[name].css',
        chunkFilename: '[id].css',
    }),
    new SpriteLoaderPlugin(
        {
            plainSprite: true
        }
    ),
    new webpack.DefinePlugin({
        'WEBPACK_BUILD_PARAMS': JSON.stringify(WEBPACK_BUILD_PARAMS)
    })
);

module.exports = prodConfig;

Буду рад любой помощи!


Ответы (0 шт):