首页 文章

使用Paper-Input时,Polymer 3.0 Uncaught DOM异常

提问于
浏览
7

使用 paper-input 时,导入会引发以下异常

未捕获DOMException:无法在'CustomElementRegistry'上执行'define':此名称已用于此注册表 .

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

Migration Tool 似乎存在问题,Google过去常常更新旧组件 .

有没有人对此进行排序?

4 回答

  • 1

    Polymer网站上有解决方案https://www.polymer-project.org/blog/2018-05-25-polymer-elements-3-faq

    • 基本上删除node_modules和package-lock.json

    • 然后重新安装,即npm install

    它应该工作 .

  • 0

    UPDATE 问题是由 node_modules 中的两个不同版本的 iron-meta 引起的: ./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
    

    错误的堆栈跟踪(下面)似乎表明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

  • 13

    按照教程add polymer element,当我导入paper-checkbox.js时,我得到了同样的错误 . 我的解决方案只是编辑文件

    paper-checkbox.js
    

    改变线

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

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

    Remember always import same module from one place.

  • 0

    我们有解决这些类型的问题 . 事实证明,聚合物3不喜欢在node_modules中嵌套 . 诀窍是手动删除抱怨的模块嵌套 .

    This issue on github against polymer突出了一个脚本化的解决方案 .

相关问题