Angular 5 Webpack 4 Rxjs 5 DllPlugin - Дублированные RxJs везде

Я использую:

"webpack": "4.12.0",    
"rxjs": "5.5.9",
"@angular" : "5.2.11"

и связывание библиотек с плагином DDL.

{
    entry: 
    {"rxjs_5_5_9": [
      "rxjs
    ],
    "angular_5_2_11": [
      "@angular/common",
      "@angular/compiler",
      "@angular/core",
      "@angular/http",
      "@angular/platform-browser",
      "@angular/platform-browser-dynamic",
      "@angular/router",
      "@angular/service-worker",
      "zone.js"
    ], (...) , "pck_libs_5_x_x": [
      "pck-referentiel"
    ]},
    output: {
      filename: "[name].bundle.js",
      path: TARGET_PATH + "/vendors/",
      library: '[name]_lib'
    },
    plugins: [
      new webpack.DllPlugin({
        context: '.',
        name: '[name]_lib',
        path: TARGET_PATH + "/vendor-[name]-manifest.json",
      }),
    ]
  };

Как вы можете видеть выше, я объявил Rxjs как отдельный пакет. Моя пользовательская библиотека pck-referentiel использует rxjs и импортирует ее в 99% случаев с помощью:

import {Observable} from "rxjs/Rx";

И вот результат:

(Я обвел каждую дублирующую rxjs)

Мы ясно видим, что rxjs разбросан по всем сторонним библиотекам, включая мою.

Как правильно ссылаться на RxJ с помощью DllPlugin, чтобы он не дублировался в каждом импортирующем модуле?

2 ответа

Решение

Они из ваших сторонних зависимых пакетов, которые внутренне зависят от rxjs а не тот, который вы добавили в качестве пакета зависимостей (rxjs), Вы можете ясно увидеть дубликат rxjs в коробках внутри сторонних пакетов.

Таким образом, они будут импортированы дубликаты (нельзя сказать, дубликаты, потому что они могут варьироваться в зависимости от подмодулей внутри rxjs) внутри vendor расслоение.

Хорошо... благодаря ответу Амит Чигадани я начал подозревать, что мое понимание DLLPlugin было неверным. Я видел его как CommonChunkPlugin, способный дедуплицировать модули и перекрестно ссылаться на них. Увы, я был не прав. Итак, я заканчиваю делать два прохода DllPlugin: один для разделяемых библиотек, один для фреймворков, которые их используют, повторное использование ранее сгенерированных файлов манифеста... и это похоже на работу!

Это дает много дополнительных работ по настройке сборки, но это работает (до сих пор...)!

Другие вопросы по тегам