使用Paper-Input

时间:2018-05-15 16:59:32

标签: polymer polymer-3.x

使用paper-input时,导入会抛出以下异常

  

未捕获DOMException:无法执行'定义' on' CustomElementRegistry':此名称已用于此注册表。

除了为3.0创建模板并添加导入外,我还没有做任何事情。

迁移工具似乎存在问题,Google曾用它来更新旧组件。

有人已经对此进行了排序吗?

4 个答案:

答案 0 :(得分:13)

更新此问题是由iron-metanode_modules的两个不同版本引起的:./node_modules/@polymer/iron-meta3.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

  1. 基本上删除node_modules和package-lock.json
  2. 然后重新安装,即npm install
  3. 它应该工作。

答案 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突出显示了脚本解决方案。