npm 包 @types/commonmark 使用教程

什么是 @types/commonmark

@types/commonmark 是 CommonMark 标准的 TypeScript 类型定义。它定义了节点和解析器等常用类和方法,方便在 TypeScript 项目中使用 CommonMark。如果你正在开发或者维护一个 TypeScript 的项目,需要使用 CommonMark 解析或者生成 Markdown,那么 @types/commonmark 可以非常方便地帮助你完成这个任务。

安装 @types/commonmark

首先,你需要安装 @types/commonmark。你可以使用 npm 安装它:

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

在这里我们加上了 --save-dev 参数,因为 @types/commonmark 只是 TypeScript 项目的开发时依赖,而不是运行时依赖。所以我们只需要在开发时安装它即可。

从 Markdown 转换成 HTML

接下来,我们来看看如何使用 @types/commonmark 将 Markdown 转换成 HTML。

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

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

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

在这个例子中,我们首先引入了 @types/commonmark 的模块。然后我们创建了两个实例:一个是 Parser,另一个是 HtmlRenderer。接着,我们将 Markdown 字符串传入到 Parser 实例中,将其解析成一个抽象语法树(AST)。然后我们将 AST 传入到 HtmlRenderer 实例中,将其渲染成 HTML 字符串。

最后,我们输出了渲染出的 HTML 字符串。

高级用法

除了基本的用法之外,@types/commonmark 还提供了很多其他的 API,如下所示:

Token 和 Node

在 CommonMark 中,解析器会将 Markdown 文本解析成一个 Token 的数组。每个 Token 都表示一种 Markdown 元素,如标题、段落、链接等。

而在 @types/commonmark 中,Token 是一个抽象基类,它定义了不同 Token 的基本共性。具体的 Token 类型则是 Lexer.HRuleTokenLexer.BlockquoteStartTokenLexer.AtxHeadingStartToken 等。

除了 Token 之外,CommonMark 中的解析器还会将 Token 转换成 Node。Node 则用于表示解析出的 Markdown 元素和它们的属性。

在 @types/commonmark 中,Node 也是一个抽象基类,它定义了不同 Node 的基本共性。具体的 Node 类型则是 Node.BlockQuoteNode.ParagraphNode.Link 等。

下面是一个例子,展示如何使用 Node 来遍历一个文档的节点:

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

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

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

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

在这个例子中,我们首先解析了一个 Markdown 字符串,并得到了它的根节点。然后我们使用一个 while 循环遍历了这个节点以下的所有节点,输出了它们的类型。

扩展解析器

@types/commonmark 允许你扩展原有的解析器,以支持自定义的 Markdown 元素。这是通过继承 InlineParserBlockParser 类并实现自己的解析方法来实现的。

还是用一个例子来说明如何实现一个自定义的解析器,以扩展 CommonMark 的语法。

首先,我们需要定义我们的解析器:

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

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

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

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

在这个例子中,我们定义了一个 MyInlineParser 和一个 MyBlockParser 类,分别用于解析内联元素和块级元素。

要实现自定义解析器,我们需要继承 InlineParserBlockParser 类,并实现我们自己的解析方法。

在这个例子中,我们实现了两个自定义的 Markdown 元素::) 和脚注(footnote)。

:) 用于在 Markdown 中输入笑脸,它在渲染时会被渲染成一个 Unicode 字符(😊)。我们在 MyInlineParser 中添加了一个名为 ":)" 的解析规则。

脚注用于在 Markdown 文档中添加注释,它的用法是在段落中添加一个类似 [text][^1] 的字符串,然后在文档结尾处添加一个类似于 [^1]: footnote text 的字符串。我们在 MyBlockParser 中添加了一个名为 "footnote" 的解析规则。

最后,我们将我们的自定义解析器传递给 Parser 中:

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

在这个例子中,我们使用了 MyInlineParser 中定义的 :) 符号。同时,我们也使用了 MyBlockParser 中定义的脚注语法。

总结

本文中介绍了 @types/commonmark 的用法和一些高级用法,包括如何扩展解析器。如果你正在开发或者维护一个 TypeScript 的项目,需要使用 CommonMark 解析或者生成 Markdown,那么 @types/commonmark 可以非常方便地帮助你完成这个任务。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/types-commonmark


猜你喜欢

  • npm包 odata-v4-metadata 使用教程

    前言 在前端开发中,我们常常需要与 REST APIs 进行交互,而 OData 是一种在 RESTful APIs 之上的协议规范,它可以提供更强大、更丰富的数据操作特性。

    4 年前
  • npm 包 @andriyf/jaydata-dynamic-metadata 使用教程

    前言 @andriyf/jaydata-dynamic-metadata 是一款用于前端开发的 npm 包,它可以根据动态数据来生成元数据并建立数据模型。在前端开发中,往往需要根据不同的数据模型来生成...

    4 年前
  • npm 包 jaydata-promise-handler 使用教程

    介绍 jaydata-promise-handler 是一个在前端开发中非常实用的 npm 包,它能够帮助我们在使用 JayData 库时更加高效地处理 Promise,避免代码中出现繁琐的 Prom...

    4 年前
  • npm 包 jaydata-error-handler 使用教程

    前言 在前端开发过程中,我们经常会使用到 JayData 这个强大的 ORM 框架。JayData 提供了非常方便的 API,可以让我们轻松地进行数据库操作。但是在实际开发中,我们也经常会遇到一些错误...

    4 年前
  • npm 包 @andriyf/odatajs 使用教程

    前言 随着 RESTful API 的流行,OData 作为基于 RESTful API 的标准化协议,越来越受到开发者的青睐,因此本文将介绍 @andriyf/odatajs 这个同样基于 ODat...

    4 年前
  • npm 包 react-with-styles-interface-css-compiler 使用教程

    在 React 应用程序开发中,CSS 风格一直是其中一个有争议的话题。有些开发人员倾向于使用传统的 CSS 文件,而另一些人则喜欢将 CSS 导入到 JavaScript 中。

    4 年前
  • npm 包 react-with-styles-interface-aphrodite 使用教程

    简介 在前端开发中,我们经常使用 React 库来构建应用,也经常需要使用样式来美化页面。而 react-with-styles-interface-aphrodite 就是一款帮助我们在 React...

    4 年前
  • npm 包 babel-plugin-inline-svg 使用教程

    介绍 在前端开发中,SVG 是一种十分重要的图形格式,它在应用中扮演着重要的角色。而 babel-plugin-inline-svg 则是一个可以帮助前端开发者使用 SVG,将 SVG 内联到 Jav...

    4 年前
  • npm 包 @welldone-software/why-did-you-render 使用教程

    简介 @welldone-software/why-did-you-render 是一款用于识别 React 组件不必要渲染的 npm 包。它可以在你的开发环境中找出组件渲染原因并提供调试信息。

    4 年前
  • npm 包 react-with-styles-interface-css 使用教程

    在前端开发中,样式的管理往往是一个复杂而重要的部分。而 React 作为目前较为流行的前端框架,在样式的处理上也有很多解决方案。其中,react-with-styles 是一个基于高阶组件的样式解决方...

    4 年前
  • npm 包 react-with-styles 使用教程

    什么是 npm 包 react-with-styles? npm 包 react-with-styles 是一款用于创建可重用 React 组件的样式库。它提供了灵活的样式化选项,并且可以与其它 CS...

    4 年前
  • npm 包 react-moment-proptypes 使用教程

    React 是一个非常流行的前端框架,但是在处理日期和时间方面,React 并没有提供很好的支持。因此,开发者们经常要依靠一些第三方库来解决这个问题。其中一个比较受欢迎的库就是 react-momen...

    4 年前
  • npm 包 is-touch-device 使用教程

    在移动设备上,许多网站和应用程序都需要知道用户是否正在使用触摸屏幕。然而,检测用户设备是否支持触摸输入并不是一件容易的事情,这就是为什么我们需要 npm 包 is-touch-device。

    4 年前
  • npm 包 enzyme-shallow-equal 使用教程

    在前端开发中,我们经常需要对 React 组件进行测试。而 enzyme-shallow-equal 这个 npm 包可以帮助我们快速而准确地比较两个 React 组件的 props 和 state ...

    4 年前
  • npm 包 react-displace 使用教程

    简介 react-displace 是一个 React 组件,它可以让你在一个元素消失之前渲染出它的占位符。这个组件可以优化页面的加载性能,让用户感受到更好的体验。

    4 年前
  • npm 包 no-scroll 使用教程

    什么是 no-scroll? 在移动端,当弹出层、侧边栏等组件显示在页面上时,我们通常会希望用户无法滚动页面,而是只能在组件内滚动。no-scroll 就是一个帮助我们实现这一功能的 npm 包。

    4 年前
  • npm 包 xpath.js 使用教程

    前言 在前端开发中,很多时候我们需要从 HTML 或 XML 文档中提取数据。在这种情况下,XPath 是一个非常强大和方便的工具。有了 XPath,我们可以通过一些表达式来定位我们需要的节点,而不需...

    4 年前
  • npm包word-wrapper使用教程

    简介 在Web开发中,文本的换行问题一直是一个很大的问题。有时候,用户输入的文本过长,会破坏页面的布局。为了解决这个问题,我们就可以使用npm包word-wrapper。

    4 年前
  • npm 包 typestyle 使用教程

    在现代 web 开发中,前端页面的样式处理是必不可少的一部分。而 CSS 又是样式处理的重要一环。随着前端技术的不断发展,我们发现用纯 CSS 处理页面样式有时会遇到不少问题,比如:命名空间冲突、代码...

    4 年前
  • npm 包 svg-points 使用教程

    前言 在前端工作中,经常涉及到 SVG 图形的绘制,而 SVG 本身用的是坐标点,如果每个点都手动输入是非常麻烦的,这时候 svg-points 就发挥了它的作用。

    4 年前

相关推荐

    暂无文章