使用paper-input
时,导入将引发以下异常
Uncaught DOMException: Failed to execute 'define' on 'CustomElementRegistry': this name has already been used with this registry.
除了为3.0创建模板并添加导入之外,我没有做任何其他事情。
Google用来更新其旧组件的迁移工具似乎存在问题。
有人已经整理过了吗?
最佳答案
UPDATE 造成此问题的原因是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
的依赖项。
该修复程序最近记录在Polymer Blog中-即删除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);
}
};
在导入任何元素定义之前运行此命令。我确认此功能适用于macOS High Sierra Chrome 66上最新版本的
paper-input
。链接您创建的问题以供引用:
PolymerElements/paper-input
Issue #652
关于polymer - 使用纸张输入时,Polymer 3.0未捕获的DOM异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50355644/