用 Deno 打造符合 Web Components 规范的组件库

阅读时长 8 分钟读完

前言

Web 组件是一种使用 HTML、CSS 和 JavaScript 来构建可复用的自定义元素的技术,可以帮助我们将页面上的各种交互性和 UI 元素封装为独立的、可复用的组件,从而提高代码的组织性和复用性。

然而,在使用原生的 Web Components 技术时,我们需要手动写大量的面向对象的 JavaScript 代码来完成组件的构建,故此,开源社区出现了大量的 Web Components 框架供我们使用。

而 Deno,是一个具有安全性、保证依赖项显式性、支持 TypeScript 等特点的现代化 JavaScript 和 TypeScript 运行时。在本篇文章中,我们将使用 Deno 来创建一个符合 Web Components 规范的组件库,借此了解如何使用 Deno 来简化组件的开发过程以及构建一个可复用的组件库。

环境准备

首先,你需要在你的本地机器上安装 Deno 运行时。你可以前往 Deno 官方网站 根据你所使用的操作系统来选择对应的安装方法进行安装,并确保安装成功。

检查安装是否成功,可以打开一个终端并输入以下命令:

如果你看到了类似于以下输出,那么你的 Deno 环境就已经准备好了。

创建组件库

我们将使用 Deno 和 TypeScript 来构建我们的组件库,并使用 deno_std 中的 ws 模块来启动一个 WebSocket 服务器,以便我们能够在实时预览时查看我们的组件。

首先,我们需要创建一个名为 my-component-library 的文件夹,并在其中创建一个名为 components 的子文件夹和一个名为 server.ts 的文件。

components 文件夹中,我们将创建我们的第一个组件 my-button,该组件将是一个简单的按钮,它能够接收一个 text 属性,用于在按钮标签内部呈现文本。

-- -------------------- ---- -------
-- ------------------------

------ - - - ---- ------------------------

--------- ----- -
  ------ -------
-

----- --------- --------- - -- ---- -- -- -
  ------ ------------------------
--

---------------------------------- ----------

在上述代码中,我们首先使用了 Preact 库来快速编写我们的组件,并在组件定义后使用了 customElements.define() 方法将组件注册到自定义元素中。

接下来,我们需要在 server.ts 文件中启动我们的 WebSocket 服务器,并提供一个 HTML 文件,以便我们能够在 Web 浏览器中访问和预览我们的组件。

-- -------------------- ---- -------
-- ---------

------ - --------------- - ---- ----------------------------------
------ - ----- - ---- ---------------------------------------

----- --- - --- ----------------------
---------------------- ------ ------- -- ----------------------

--- ----- ------ --- -- ------- ----- ---- --- -
  ----- ---- - -
    --------- -----
    ------
      ------
        --------- --------- ---------------
        ------- --------------
          ------ -----------------------------
        ---------
      -------
      ------
        ---------- ----------- -------------------
      -------
    -------
  --
  ------------- ----- ---- ---
-

在上述代码中,我们首先启动了一个 WebSocket 服务器,并在 serve() 方法中启动了一个 HTTP 服务器以提供我们的 HTML 文件。在 HTML 文件中,我们使用了 import 语句来引入我们的 my-button 组件,并使用了 my-button 标签来将该组件插入到我们的页面中。

运行以下命令来启动我们的服务器:

现在,我们可以访问 http://localhost:8000 来看到我们的组件了!

打包组件库

我们的组件库虽然已经可以正常工作,但它还没有被打包成一个可以在其他项目中使用的代码包。为了打包我们的组件库,我们将使用 rollup,它是一个快速的 JavaScript 模块打包器,可将我们的源代码转换为浏览器可用的 JavaScript 文件。

首先,我们需要安装 rollup 和一些相关的插件:

接下来,我们需要创建一个名为 rollup.config.js 的文件来配置我们的打包流程:

-- -------------------- ---- -------
-- ----------------

------ - ------------ - ---- ---------
------ ---------- ---- ----------------------------
------ ------- ---- ------------------------------
------ -------- ---- --------------------------
------ ------ ---- ----------

------ ------- --------------
  ------ -----------
  ------- -
    ----- ----------------
    ------- ------
    ---------- -----
  --
  -------- -
    -------------
    ----------
    -----------
    --------
      ----- -----
      ------ -
        ------- ----------------
      --
    ---
  --
  --------- -------
---

在上述代码中,我们首先使用 @rollup/plugin-typescript 插件处理我们的 TypeScript 代码,并使用 @rollup/plugin-node-resolve@rollup/plugin-commonjs 插件处理我们的依赖项(如 Preact 和 Deno 标准库)。

我们还使用了 ips-npm 插件来处理我们的 Preact 依赖项,以确保我们的组件库能够正常工作。最后,我们将 ws 标记为我们的外部依赖项,因为它是我们的 WebSocket 服务器的依赖项。

接下来,我们需要创建一个名为 index.ts 的文件,并将所有的组件都导出:

最后,我们可以运行以下命令来构建我们的组件库:

现在,我们的组件库已经被打包到了 dist/index.js 文件中。我们可以将该文件复制到我们的项目中,并在 HTML 文件中使用 import 语句来加载我们的组件库:

-- -------------------- ---- -------
--------- -----
------
  ------
    --------- --------- ---------------
    ------- ------------- -------------------------------
  -------
  ------
    ---------- ----------- -------------------
  -------
-------

总结

在本文中,我们介绍了如何使用 Deno 来创建符合 Web Components 规范的组件库,并使用 rollup 打包程序代码以供其他项目使用。我们还介绍了如何使用 Preact 快速编写我们的组件,以及如何使用 WebSocket 在实时预览时查看我们的组件。

通过学习本文,你可以更加深入地了解如何使用 Deno 构建现代化的 JavaScript 应用程序,在组件化开发过程中提高代码的复用性,从而更快地开发出更好的 Web 应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64913fbb48841e9894f3f2da

纠错
反馈