【问题标题】:Can I use ES Modules library from CDN?我可以使用 CDN 中的 ES Modules 库吗?
【发布时间】:2019-10-23 15:43:56
【问题描述】:

我想通过 CDN 使用这个库。
https://www.jsdelivr.com/package/npm/lit-element

我的js代码在这里。

import { LitElement, html } from "https://cdn.jsdelivr.net/npm/lit-element@2.1.0/lit-element.js";

class MyElement extends LitElement {
    render(){
        return html`ABCD`
    }
}

customElements.define("my-element", MyElement)

我收到以下错误。

未捕获的类型错误:无法解析模块说明符“lit-html”。相对引用必须以“/”、“./”或“../”开头。

我必须使用 npm 构建吗?


更新

以下代码有效。

import { LitElement, html } from "https://unpkg.com/lit-element/lit-element.js?module"

class MyElement extends LitElement {
    render(){
        return html`ABCD`
    }
}

customElements.define("my-element", MyElement)

【问题讨论】:

  • 我原以为将 ?module 添加到 URL 会修复它(就像这里的 codepen.io/johnthad/pen/vbBojK?editors=1001 和 unpkg.com)但我什么也没看到。可能是 CDN 问题。
  • 谢谢。它适用于 unpkg.com。

标签: javascript cdn lit-element es6-modules


【解决方案1】:

在 LitHtml 和 LitElement 模块内部使用裸模块说明符在内部导入依赖项,而 JS 模块尚不支持这些。 LitElement 有 import { TemplateResult } from 'lit-html',但 JS 需要将 'lit-html' 替换为实际文件的任何路径(不是包的抽象名称)。

如果您使用 npm 包(cdn.jsdelivr.net 在此处提供服务),您必须使用构建步骤(WebPack、Rollup 等)将所有这些 import 语句解析为 JS 支持或内联的文件路径所有文件放在一起。

前者是unpkg.com ... ?module 所做的,它将对lit-html 的裸引用替换为绝对的https://unpkg.com/lit-html@^1.1.1/lit-html.js?module。

【讨论】:

  • 或者从 CDN 下载文件,将裸引用替换为正确的 URL,然后使用该文件而不是 CDN。
猜你喜欢
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2016-03-24
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
相关资源
最近更新 更多