使用paper-input
时,导入会抛出以下异常
未捕获DOMException:无法执行'定义' on' CustomElementRegistry':此名称已用于此注册表。
除了为3.0创建模板并添加导入外,我还没有做任何事情。
迁移工具似乎存在问题,Google曾用它来更新旧组件。
有人已经对此进行了排序吗?
答案 0 :(得分:13)
更新此问题是由iron-meta
中node_modules
的两个不同版本引起的:./node_modules/@polymer/iron-meta
中3.0.0-pre.18
的旧版本({1}}已经安装了Polymer Starter Kit)和一个较新的(3.0.0-pre.19
)作为新安装的@polymer/paper-input
的依赖项。
最近在Polymer Blog中记录了该修补程序 - 即删除package-lock.json
并重新安装node_modules
:
rm -rf node_modules package-lock.json
npm install
错误的堆栈跟踪(下面)似乎表明iron-meta以某种方式注册了两次:
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);
}
};
在导入任何元素定义之前运行此。我确认这适用于macOS High Sierra,Chrome 66的最新版paper-input
。
链接您创建的问题以供参考:PolymerElements/paper-input
Issue #652
答案 1 :(得分:1)
解决方案在Polymer网站上 https://www.polymer-project.org/blog/2018-05-25-polymer-elements-3-faq
它应该工作。
答案 2 :(得分:0)
请按照教程add polymer element进行操作,当我导入paper-checkbox.js时, 我遇到了同样的错误。 我的解决方案就是编辑文件
paper-checkbox.js
更改线路
import '@polymer/polymer/polymer-legacy.js';
到
import '../../@polymer/polymer/polymer-legacy.js';
切记始终从一个位置导入同一模块。
答案 3 :(得分:0)
我们可以解决这些类型的问题。事实证明,聚合物3不喜欢在node_modules中嵌套。技巧是手动删除抱怨的模块嵌套。
This issue on github against polymer突出显示了脚本解决方案。