LitElement 3.0 & lit-html 2.0:早期预览版
预览 LitElement 和 lit-html 的下一个主要版本。
今天,我们发布了我们旗舰库 LitElement 和 lit-html 的下一个主要版本的第一个预览版。
这些版本包含了我们打算进行的大多数重大更改,以及我们想要从以前版本中继承的大多数功能。它们尚未完成功能或完全 API 稳定。值得注意的是,它们尚不支持 IE11 等旧版浏览器,也不支持需要 Web 组件 polyfill 的浏览器。
动机
我们对库的当前版本非常满意——它们速度快、体积小、稳定(太好了!)——在某种程度上,我们没有太多迫切需要进行重大更改。我们不会轻易进行重大更改。但是,有一些令人信服的理由让我们做出一些我们认为会改善使用 LitElement 构建的组件和应用程序的用户体验的更改。
性能
我们发现,我们的一些浏览器错误解决代码和自定义抽象阻止了我们希望做到的优化。
尺寸
同样的代码以及我们广泛的公共 API 占用了字节。我们总是想找到方法使库更小。
功能和 API 清理
一些功能难以以经济高效的方式在当前架构中添加,或者在没有重大更改的情况下无法真正改进。
服务器端渲染
lit-html 具有非常灵活且可自定义的 API,在某种程度上,它更像是一个模板系统构建工具包,而不是一个单一的模板系统。但是这种灵活性使 SSR 变得复杂,因为 SSR 需要对服务器渲染的 HTML 如何映射到模板做出假设。SSR 仅适用于默认的、未自定义的 lit-html,因此限制自定义使 SSR 更可靠。很少有开发人员使用自定义 API。
我们还想通过限制对 DOM 的访问来使指令 API 与 SSR 兼容。
有什么变化
这些是新的主要版本,因此存在一些重大更改,但我们希望尽可能地将对用户的干扰降到最低。我们限制了重大更改,以便它们不会影响大多数用户,或者只需要机械更改(例如更改导入)。
请参阅 README (LitElement,lit-html) 和 CHANGELOG (LitElement,lit-html) 以获取最详细的更改列表。
最重要的更改
不再直接支持自定义 lit-html 的语法。templateFactory 和 TemplateProcessor API 已被删除。
为了促进更好的压缩和未来发展,公共 API 已被最小化。
lit-html 指令 API 已更改为基于类的,并保留指令实例。指令应该更容易编写,也更容易与 SSR 兼容。
LitElement 装饰器不再从主模块导出——它们必须单独导入或从新的
lit-element/decorators.js
模块导入。这意味着非装饰器用户的应用程序尺寸更小,并为新的装饰器打开了大门,这些装饰器在这些装饰器到来时实现了当前的 TC39 JavaScript 提案。lit-html 不再使用
instanceof
或模块级 WeakMaps 来检测模板结果和指令等特殊对象,这应该会提高单个应用程序中多个 lit-html 副本的兼容性。我们仍然建议对 npm 包进行去重,但现在会有更多情况可以正常工作。Safari 12 存在一个严重的 模板字面量错误,lit-html 中不再对其进行解决。如果您支持 Safari 12,您将必须将模板字面量编译为其 ES5 等效项。请注意,babel-preset-env 已经为 Safari 的损坏版本执行了此操作。
变更日志中列出了更小的更改。总的来说,我们希望这些版本能够替代大多数用户的版本,或者只需要更新装饰器导入。
安装
运行
npm i lit-element@next-major
以及/或
npm i lit-html@next-major
提交反馈
我们正在将 LitElement 和 lit-html 的下一个版本迁移到一个单一仓库中。请在 当前的 lit-html 仓库 上提交问题,使用 [lit-html]
或 [lit-element]
的前缀。我们预计,与任何预发布版本一样,将有一些常见问题需要我们解决。请先搜索您的问题。下一个主要版本的问题将标有 lit-next 标签。
接下来是什么
对于下一个预览版,我们将专注于浏览器和 polyfill 支持,尤其是 IE11。