Lit-Html“对象对象”代码显示在浏览器中 分辨率

问题描述

我的浏览器在网页中显示JavaScript代码,而不是自定义元素的预期输出。该网页显示

C

自定义元素的代码很简单:

[object Object]

我没有使用Node,NPM或任何构建工具,只是从JSPM CDN导入ES6模块来加载JavaScript。

解决方法

回答我自己的问题,因为它可能会对遇到此问题的其他开发人员有所帮助。

问题

问题出在这里:在我的自定义元素中,我多次加载了lit-html。一个版本的lit-html无法识别另一个版本的TemplateResult,因此呈现JavaScript代码而不是HTML。导入LitElement会隐式加载lit-html的最新版本(当时为1.3.0版)。显式导入lit-html 1.2.1版引入了版本冲突。在这种情况下,问题是由固定版本并在单独的导入表达式中加载LitElement和lit-html引起的。在其他情况下,您可能会无意中加载lit-html的冲突版本。

解决方案

lit-html应该始终只有一个版本。您可以在代码中多次使用import { LitElement } from 'https://jspm.dev/[email protected]'; import { html } from 'https://jspm.dev/[email protected]'; export class MyFooter extends LitElement { createRenderRoot() { return this; } render(){ return html` foobar `; } } customElements.define('my-footer',MyFooter); 伪指令。但是请确保导入表达式仅加载lit-html的一个实例。

分辨率

这是一个可解决此问题的导入表达式:

html

在改进的代码中,单个导入表达式从同一源加载LitElement和lit-html模块,而不会发生版本冲突。

更多信息

我写了一篇更深入的文章,描述了Node和NPM的其他情况,并使用了import { LitElement,html } from 'https://jspm.dev/[email protected]'; 之类的lit-html指令,以及一些有关指定版本范围的一般建议,以避免重大的改动。这是文章:

Troubleshooting Lit-Html: Code Displaying in the Browser