rollup js Избегайте дублирования функций с несколькими файлами - PullRequest
0 голосов
/ 18 июня 2020

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

Таким образом, я пытаюсь добиться этого, используя @ rollup / plugin-multi-entry, указывающий на все файлы внутри каталога

Проблема, с которой я столкнулся в настоящее время, заключается в том, что некоторые файлы расширяют друг друга, когда они упакованы, расширенная функция дублируется несколько раз с именем $ n и т. д., можно ли сделать так, чтобы накопление не дублировало эти расширенные функции?

Спасибо

1 Ответ

0 голосов
/ 18 июня 2020

Объединение библиотек в файл vendor теперь считается анти-шаблоном, поскольку вы пренебрегаете преимуществами three-shaking. Это также будет хуже caching, поскольку каждый раз, когда какая-либо библиотека изменяется, кеш всего поставщика будет недействителен, и, наконец, вы не получите такой большой выгоды от http2 мультиплексирования .

Если вы все еще хотите сделать это, чтобы дать им надежные имена (и избежать конфликтов имен), намного проще сделать это вручную:

// vendor.js
import * as lib1 from 'lib1';
import * as lib2 from 'lib2';

export {lib1, lib2}

Предыдущий модуль, когда используется как запись точка, приведет к экспорту всех экспортов из обеих библиотек в соответствующие пространства имен, а свертка будет правильно обрабатывать внутренние зависимости между библиотеками.

Изменить: если вы можете связать библиотеки вместе с проектом, а не в другом процессе сделать это можно так:

// rollup.config.js
const libs = ['lib1', 'lib2'];
{
  input: 'index.js',
  manualChunks: {
    vendor: libs.map((lib) => require.resolve(lib))
  },
  // ...
}

...