Polymer 3.0 Неперехваченное исключение DOM при использовании Paper-Input

При использовании paper-input импорт выдает следующее исключение

Uncaught DOMException: не удалось выполнить 'define' в 'CustomElementRegistry': это имя уже использовалось в этом реестре.

Я ничего не делал, кроме создания шаблона для 3.0 и добавления импорта.

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

Кто-нибудь уже разбирал это?


person Ignacio Nacho Parravicini    schedule 15.05.2018    source источник
comment
Как вы собираете свой JS? У меня была эта проблема с использованием плоского импорта с помощью Webpack. Обычно у вас есть несколько объявлений одного и того же настраиваемого элемента в вашем пакете.   -  person LasaleFamine    schedule 14.06.2018


Ответы (4)


ОБНОВЛЕНИЕ Проблема вызвана двумя разными версиями iron-meta в node_modules: более старой версией в ./node_modules/@polymer/iron-meta на 3.0.0-pre.18 (которая уже установлена ​​вместе с Polymer Starter Kit) и более новой (3.0.0-pre.19) в зависимости от недавно установленный @polymer/paper-input.

Исправление было недавно задокументировано в блоге о полимерах - т.е. удалить package-lock.json и переустановить node_modules:

rm -rf node_modules package-lock.json
npm install

Трассировка стека ошибки (ниже), похоже, указывает на то, что железная мета каким-то образом регистрируется дважды:

polymer-fn.js:43 Uncaught (in promise) DOMException: Failed to execute 'define' on 'CustomElementRegistry': this name has already been used with this registry
    at Polymer (http://127.0.0.1:8081/node_modules/@polymer/polymer/lib/legacy/polymer-fn.js:43:18)
    at http://127.0.0.1:8081/node_modules/@polymer/iron-input/node_modules/@polymer/iron-meta/iron-meta.js:131:1

Один из способов решения проблемы - исправить customElements.define, чтобы он запускался только в том случае, если элемент еще не определен:

const _customElementsDefine = window.customElements.define;
window.customElements.define = function(name, clazz, config) {
  if (!customElements.get(name)) {
    _customElementsDefine.call(window.customElements, name, clazz, config);
  }
};

Запустите это перед импортом любого определения элемента. Я подтвердил, что это работает для последней версии paper-input на macOS High Sierra, Chrome 66.


Связывание проблемы, которую вы создали для справки: PolymerElements/paper-input Issue № 652

person tony19    schedule 16.05.2018
comment
Спасибо за исправление моего кода! Я никогда не использовал customElements.get, и документацию ... Ну, мы знаем документацию. Я откатился на Полимер 2.0, так как очень торопился, но попробую еще раз, когда все уляжется. Большое спасибо! - person Ignacio Nacho Parravicini; 18.05.2018
comment
Я столкнулся с этим, просматривая polymer-project.org/3.0/start / toolbox / add-elements. Переустановка не помогла, но вы customElements.define fix помогли, спасибо! - person dArignac; 03.07.2018
comment
@dArignac рад, что сработало для вас. Что касается переустановки, вы заранее удалили и node_modules, и package-lock.json? - person tony19; 03.07.2018
comment
@ tony19 да, я тоже - person dArignac; 05.07.2018
comment
Ни одно из этих решений не работает для меня. С патчем и без патча получаю одни и те же ошибки. Показано здесь ... jpst.it/1kyao - person Let Me Tink About It; 31.07.2018
comment
@Mowzer Ошибка на вашем снимке экрана не совпадает с рассматриваемой ошибкой. Похоже, вам не хватает некоторых зависимостей. - person tony19; 01.08.2018
comment
Спасибо за этот патч. Как и другие говорили, удаление node_modules и package-lock для меня не сработало, но ваш патч решил это. Надеюсь, что в будущем будет лучшее исправление, мой base.html оооочень уродлив со всеми необходимыми помощниками и полифилами, просто чтобы мое приложение могло работать в нескольких браузерах ›.‹ - person Andre; 17.10.2018
comment
@ tony19, к сожалению, я не могу этого сделать, так как это частное репо для клиента :( - person Andre; 17.10.2018

Решение есть на веб-сайте Polymer https://www.polymer-project.org/blog/2018-05-25-polymer-elements-3-faq

  1. В основном удалите node_modules и package-lock.json
  2. Затем переустановите, т.е. npm install

Тогда это должно сработать.

person Vikram Rawat    schedule 15.06.2018

как следуйте инструкциям по добавлению полимерного элемента, когда я импортирую бумагу, -checkbox.js, у меня такая же ошибка. мое решение - просто отредактировать файл

paper-checkbox.js

изменить строку

import '@polymer/polymer/polymer-legacy.js';

to

import '../../@polymer/polymer/polymer-legacy.js';

Помните, что всегда импортируйте один и тот же модуль из одного места.

person 布日古德    schedule 30.06.2018

У нас есть способ решения таких проблем. Оказывается, полимер 3 не любит вложение в node_modules. Уловка состоит в том, чтобы вручную удалить вложения модулей, которые жалуются.

В этой проблеме на github против полимера подчеркивается решение, основанное на сценарии.

person Matt    schedule 18.10.2018