Дублирующие библиотеки Webpack - PullRequest
0 голосов
/ 31 октября 2018

У меня есть несколько интерфейсных библиотек JS, которые зависят друг от друга. Дерево выглядит примерно так:

    A
   / \
   |  B
   | /
    C

Поэтому, когда я собираю B с помощью веб-пакета, моя конфигурация веб-пакета выглядит следующим образом:

module.exports = {
    entry: {
        'B': [__dirname + '/js/exports.js']
    },
    output: {
        path: __dirname + '/dist',
        filename: '[name].js',
        // `library` determines the name of the global variable
        library: '[name]',
        libraryTarget: 'umd'
    },
    externals: [
        /^(jquery|\$)$/i
    ]
};

Мой конфиг веб-пакета для C выглядит идентично (запись просто называется 'C'). Когда B строится, он связывает в него C.

A и B оба используют экспортированный констант из C под названием Manifest. Manifest.js выглядит (несколько упрощенно):

class _Manifest {
    init(id) {
       this.id = id;
    }
    getManifest() {
        return this.id;
    }
}
export const Manifest = new _Manifest();

Сначала A вызывает Manifest.init, затем B вызывает getManifest (). Однако внутри B getManifest () возвращает undefined. Я полагаю, это потому, что B связывает C (и, следовательно, связывает Manifest), и A также заканчивает тем, что тянет C в node_modules, потому что C указан как зависимость B в package.json B.

Так что, когда я делаю

import {Manifest} from "C" from inside of A 

возвращает объект Manifest, отличный от того, что я делаю

import {Manifest} from "C" from inside of B

Я прошу прощения за очень длинный вопрос, и прошу прощения, если это не имеет смысла. Пытался объяснить, что мог.

...