Дублирование модулей с помощью пакетов webpack

#javascript #node.js #webpack #ecmascript-6

#javascript #node.js #webpack #ecmascript-6

Вопрос:

Как устранить дублирование модулей между пакетами с помощью webpack V4?

Если «модуль A» имеет зависимость от «модуля C» и генерирует пакет «index.js «. Если «модуль B» имеет зависимость от «модуля C» (той же версии) и генерирует пакет «index.js «.

Если «модуль D» имеет зависимость как с пакетом «модуль A», так и с пакетом «модуль B»: при проверке сгенерированного пакета я вижу, что код «модуля C» дублируется.

Каково решение для устранения дублирования кода в разных пакетах?

РЕДАКТИРОВАТЬ: Моя конфигурация webpack :

 var path = require('path');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;


var webpackConfigManager = function(){

    let outDir = path.join(process.cwd(), "dist");
    let inPath = path.join(process.cwd(), 'src/index.js')

    let config = {
        mode: 'production', 
        devtool:false,
        plugins: [
            new BundleAnalyzerPlugin()
          ],
        entry: [inPath],
        output: {
            path: outDir,
            filename: 'index.js',
            libraryTarget: "umd" 
        },
        resolve: {
            extensions: ['.js', '.jsx', '.css', '.scss'],
            symlinks:false
        },
        module: {
            rules: [
                {
                    enforce: "pre",
                    test: /.jsx?$/,
                    exclude: /node_modules|bower_components/,
                    loader: "eslint-loader",
                },
                {
                    test: /.s?css$/,
                    use: ['style-loader', {
                        loader: 'css-loader',
                        options: {
                            modules: false,
                            importLoaders: 2,
                            sourceMap: true,
                            localIdentName: "[path][name]__[local]--[hash:base64:5]"
                        }
                    },
                        {
                            loader: "sass-loader",
                            options: {
                                sourceMap: true,
                                includePaths: ['./']
                            }
                        }
                    ]
                },

                {
                    test: /.jsx?$/,
                    exclude: /node_modules|bower_components/,
                    use: {
                      loader: "babel-loader"
                    }
                },
            ]
        }
    };

    return config;
}

module.exports = env => {
return webpackConfigManager();
};
  

пример импорта :

 import MyComponent from "@myscope/myReactComponent";
  

Комментарии:

1. Похоже, вы неправильно встряхиваете дерево.

2. Встряхивание дерева направлено на удаление неиспользуемого кода, не так ли? Со своей стороны, весь код «модуля C» используется как в «модуле A», так и в «модуле B»

3. Встряхивание дерева удаляет неиспользуемый код и должно также удалять дублированный код. Или, по крайней мере, определите общие модули и поместите их в общий пакет.

4. пожалуйста, покажите конфигурацию вашего webpack

5. Можете ли вы также поделиться своими инструкциями import / require?