Как включить одну и ту же зависимость веб-компонента в несколько компонентов без повторяющейся ошибки реестра

Я делаю библиотеку, похожую на Polymer Material. У меня есть отдельные файлы, которые я использую для создания одного файла ESM, CJS и UMD. Файл ESM является основным в package.json. У меня такая ситуация

Header
  Icon-Button
Icon-Button

Значок кнопки использует усы, поэтому мне нужно включить его с помощью rollup-plugin-node-resolve. Затем я импортирую библиотеку в заголовок и создаю файл UMD, который импортируется в мое приложение, вот так ...

// Pug
script(src="/ui-components/header/dist/index.umd.js")
script(src="/ui-components/icon-button/dist/index.umd.js")

// Express
// @me/icon-button
// @me/header
const uiPath = path.join(__dirname, './node_modules/@me');
app.use('/ui-components', express.static(uiPath));

Я получаю следующее в консоли браузера при загрузке ...

Не удалось выполнить 'define' в 'CustomElementRegistry': имя «me-icon-button» уже использовалось в этом реестре.

Как библиотеки справляются с этим? Я подумал об удалении плагина разрешения для усов и предположил, что он включен глобально. Однако кажется довольно обременительным заставить всех найти способ импортировать усы в окно, а не то, что делают большинство библиотек. Я также мог бы сделать что-то вроде этого вопроса. ..

customElements.get("me-icon-button")||customElements.define("me-icon-button", IconButton, {...});

Но повторение этого в моем коде тоже не кажется правильным.

Итак, как мне включить несколько веб-компонентов, которые ссылаются на другие похожие компоненты?


person JGleason    schedule 12.12.2019    source источник
comment
с импортом модуля JS   -  person Supersharp    schedule 12.12.2019
comment
Можете ли вы расшириться? Даже если я запускаю как модули ESM (которые, я не уверен, полностью работают с учетом поддержки dep), это все равно запускается 2 раза. Так, например, если я загружаю версию заголовка ESM, он говорит, что не может загрузить иконку-кнопку без использования чего-то вроде глобального (говорит, что нужно начинать с / или ./ и т. Д.). Также это UMD, который не использует type = module. Так что я немного не понимаю, как это предложение помогает.   -  person JGleason    schedule 13.12.2019