gray matter

2025-12-11 0 613

灰色

从字符串或文件中解析前符号。快速,可靠且易于使用。默认情况下对YAML的前提进行解析,但也支持YAML,JSON,TOML或Coffee Front-Matter,并提供设置自定义定界符的选项。由金属匠,组装,动词和许多其他项目使用。

请考虑关注该项目的作者乔恩·施林克特(Jon Schlinkert),并考虑主演该项目以显示您的❤️和支持。

安装

使用NPM安装:

$ npm install --save gray-matter

小心!

请参阅ChangElog,了解有关v3.0中进行的破坏变化。

赞助商

多亏了以下公司,组织和个人支持灰色 – 灰色持续的维护和发展!成为赞助商,将您的徽标添加到此读数或我的其他任何项目中

这做什么?

运行此示例

在以下示例中添加HTML example.html$$ node example代码添加到example.js

 const fs = require ( \'fs\' ) ;
const matter = require ( \'gray-matter\' ) ;
const str = fs . readFileSync ( \'example.html\' , \'utf8\' ) ;
console . log ( matter ( str ) ) ;

像这样将字符串转换为前符号:

 ---
title : Hello
slug : home
---
< h1 >Hello world!</ h1 >

像这样的对象:

 {
  content : \'<h1>Hello world!</h1>\' ,
  data : {
    title : \'Hello\' ,
    slug : \'home\'
  }
} 

为什么要使用灰色膜?

  • 简单:主函数采用字符串并返回对象
  • 准确:比依靠正则解析的前摩托解析器更好地捕捉和处理边缘壳体
  • 快速:比其他使用正则解析的前后解析器快的速度
  • 灵活:默认情况下,Gray-Matter能够解析YAML,JSON和JavaScript Front-Matter。但是可以添加其他引擎。
  • 可扩展:使用自定义定系数,或添加对任何语言的支持,例如TOML,Coffeescript或CSON
  • 战斗测试:由汇编,金属史密斯,现象,动词,生成,更新和其他许多人使用。
理由

为什么我们首先要创建灰色毛?

在尝试其他未能满足我们的标准和要求的库后,我们创建了灰色蒙马。

一些图书馆满足了大多数要求,但没有人满足所有要求

这是最重要的

  • 可用,即使不是简单的话
  • 使用可靠且支持良好的库来解析YAML
  • 支持其他语言除了YAML
  • 支持串起回到YAML或其他语言
  • 当不存在内容时不要失败
  • 不存在前提时不要失败
  • 不要使用正则分析。这是一个相对简单的解析操作,Regex是最慢,最容易出错的方法。
  • 直接阅读yaml文件没有问题
  • 对于复杂的内容没有任何问题,包括包含YAML前提示例的非前后围栏代码块。其他解析器对此失败。
  • 支持将串起回到前后。这对于覆盖,更新属性等很有用。
  • 避免避免定界符碰撞的必要时,允许自定义定系数。
  • 应至少返回一个至少这三个属性的对象:
    • data :解析的YAML前提是JSON对象
    • content :内容作为字符串,没有前面物质
    • orig :“原始”内容(用于调试)

用法

使用Node的require()系统:

 const matter = require ( \'gray-matter\' ) ;

或与打字稿

 import matter = require ( \'gray-matter\' ) ;
// OR
import * as matter from \'gray-matter\' ;

将字符串和选项传递给灰色 – 毛线:

 console . log ( matter ( \'---\\ntitle: Front Matter\\n---\\nThis is content.\' ) ) ;

返回:

 {
  content : \'\\nThis is content.\' ,
  data : {
    title : \'Front Matter\'
  }
}

有关返回对象的更多信息,请参见下面的部分。


返回的对象

灰色 – 模 – 返回具有以下属性的file对象。

枚举

  • file.data {object} :通过解析前模创建的对象
  • file.content {string} :输入字符串,删除matter
  • file.excerpt {string} :摘录,如果在选项上定义
  • file.empty {string} :当前形式为“空”(所有空格,根本没有,或者只是注释,没有数据)时,该属性将设置原始字符串。有关用例的详细信息,请参见#65。
  • file.isEmpty {boolean} :true如果前消息是空的。

不可能

此外,将以下不可耗尽的属性添加到对象中以帮助调试。

  • file.orig {buffer} :原始输入字符串(或buffer)
  • file.language {string} :解析的前后语言。 yaml是默认
  • file.matter {string}原始的,未散布的前后字符串
  • file.stringify {function} :通过将file.data转换为给定语言中的字符串,将其包装在定界符中,然后将其预先准备为file.content

运行示例

如果您想测试示例,请首先克隆灰色 – 重点到my-project中(或任何想要的地方):

$ git clone https://github*.c**om/jonschlinkert/gray-matter my-project

CD进入my-project并安装依赖项:

$ cd my-project && npm install

然后运行任何示例以查看灰色 – 象征的工作方式:

$ node examples/ < example_name >

链接到示例

  • 咖啡
  • 摘录 – 分离器
  • 摘录统计
  • 摘抄
  • JavaScript
  • JSON-Stringify
  • JSON
  • 恢复空
  • 部分 – 开发
  • 部分
  • 汤姆
  • YAML分解
  • yaml

API

事情

从字符串中获取content或对象,并从字符串中提取和解析,然后返回具有datacontent和其他有用属性的对象。

参数

  • input {object | string} :字符串,或带有content字符串的对象
  • options {对象}
  • returns {对象}

例子

 const matter = require ( \'gray-matter\' ) ;
console . log ( matter ( \'---\\ntitle: Home\\n---\\nOther stuff\' ) ) ;
//=> { data: { title: \'Home\'}, content: \'Other stuff\' }

.Stringify

将对象串起到YAML或指定的语言,然后将其附加到给定的字符串。默认情况下,只能将YAML和JSON串制。请参阅“引擎部分”部分,以了解如何串用其他语言。

参数

  • file {String | Object} :要附加到字符串的Front-Matter或带有file.content字符串的文件对象的内容字符串。
  • data {object} :前面要弦乐。
  • options {Object} :将传递到灰色粘合和JS-yaml的选项。
  • returns {string} :返回一个通过将字符串的yaml与定界数包装而创建的字符串,并将其附加到给定的字符串中。

例子

 console . log ( matter . stringify ( \'foo bar baz\' , { title : \'Home\' } ) ) ;
// results in:
// ---
// title: Home
// ---
// foo bar baz

。读

同步读取文件系统中的文件并解析前事项。返回与主函数相同的对象。

参数

  • filepath {string} :要读取的文件路径。
  • options {Object} :传递给灰色象征的选项。
  • returns {对象} :返回带有datacontent对象

例子

 const file = matter . read ( \'./content/blog-post.md\' ) ;

。测试

如果给定的string具有正面功能,则返回true。

参数

  • string {字符串}
  • options {对象}
  • returns {boolean} :如果存在前面物质,则为true。

选项

options.excerpt

类型Boolean|Function

默认值undefined

提取直接遵循前后符号的摘录,或者如果不存在前者,则是字符串中的第一件事。

如果设置为excerpt: true ,它将默认情况下寻找前肌定界符---并抓住所有导致其的所有内容。

例子

 const str = \'---\\nfoo: bar\\n---\\nThis is an excerpt.\\n---\\nThis is content\' ;
const file = matter ( str , { excerpt : true } ) ;

结果:

 {
  content : \'This is an excerpt.\\n---\\nThis is content\' ,
  data : { foo : \'bar\' } ,
  excerpt : \'This is an excerpt.\\n\'
}

您还可以将excerpt设置为函数。此函数使用最初将其作为参数传递给灰色 – 毛线的“文件”和“选项”,因此您可以控制如何从内容中提取摘录。

例子

 // returns the first 4 lines of the contents
function firstFourLines ( file , options ) {
  file . excerpt = file . content . split ( \'\\n\' ) . slice ( 0 , 4 ) . join ( \' \' ) ;
}

const file =  matter ( [
  \'---\' ,
  \'foo: bar\' ,
  \'---\' ,
  \'Only this\' ,
  \'will be\' ,
  \'in the\' ,
  \'excerpt\' ,
  \'but not this...\'
] . join ( \'\\n\' ) , { excerpt : firstFourLines } ) ;

结果:

 {
  content : \'Only this\\nwill be\\nin the\\nexcerpt\\nbut not this...\' ,
  data : { foo : \'bar\' } ,
  excerpt : \'Only this will be in the excerpt\'
}

options.excerpt_separator

类型String

默认值undefined

定义用于摘录的自定义分离器。

\’}));\”>

 console . log ( matter ( string , { excerpt_separator : \'<!-- end -->\' } ) ) ;

例子

以下HTML字符串:

<h1>Hello world</h1>\”>

---
title: Blog
---
My awesome blog.
<!-- end -->
< h1 > Hello world </ h1 >

结果:

\\n<h1>Hello world</h1>\’
}\”>

 {
  data : { title : \'Blog\' } ,
  excerpt : \'My awesome blog.\' ,
  content : \'My awesome blog.\\n<!-- end -->\\n<h1>Hello world</h1>\'
}

选项。发动机

定义用于解析和/或串起前摩擦的自定义引擎。

类型:引擎的Object对象

默认值JSONYAMLJavaScript默认情况下已处理。

发动机格式

引擎可以是带有parse对象,并且((可选)) stringify方法,也可以是仅用于解析的函数。

例子

 const toml = require ( \'toml\' ) ;

/**
 * defined as a function
 */

const file = matter ( str , {
  engines : {
    toml : toml . parse . bind ( toml ) ,
  }
} ) ;

/**
 * Or as an object
 */

const file = matter ( str , {
  engines : {
    toml : {
      parse : toml . parse . bind ( toml ) ,

      // example of throwing an error to let users know stringifying is
      // not supported (a TOML stringifier might exist, this is just an example)
      stringify : function ( ) {
        throw new Error ( \'cannot stringify to TOML\' ) ;
      }
    }
  }
} ) ;

console . log ( file ) ;

选项。语言

类型String

默认值yaml

定义用于解析前后解析的引擎。

 console . log ( matter ( string , { language : \'toml\' } ) ) ;

例子

以下HTML字符串:

---
title = \"TOML\"
description = \"Front matter\"
categories = \"front matter toml\"
---
This is content

结果:

 { content : \'This is content\' ,
  excerpt : \'\' ,
  data :
   { title : \'TOML\' ,
     description : \'Front matter\' ,
     categories : \'front matter toml\' } }

动态语言检测

Gray-Matter不会在选项上定义语言,而是会自动检测第一个定界符后定义的语言,并选择用于解析的正确引擎。

---toml
title = \"TOML\"
description = \"Front matter\"
categories = \"front matter toml\"
---
This is content

options.delimiters

类型String

默认---

可以作为一系列字符串传递开放和关闭的定系数。

例子:

 // format delims as a string
matter . read ( \'file.md\' , { delims : \'~~~\' } ) ;
// or an array (open/close)
matter . read ( \'file.md\' , { delims : [ \'~~~\' , \'~~~\' ] } ) ;

会解析:

~~~
title: Home
~~~
This is the {{title}} page.

弃用的选项

options.lang

减少,请使用options.language。

options.delims

减少,请使用options.delimiters。

options.parsers

减少,请使用options.engines。

关于

贡献

始终欢迎拉动请求和星星。对于错误和功能请求,请创建一个问题。

运行测试

运行和审查单元测试是熟悉库及其API的好方法。您可以使用以下命令安装依赖项并运行测试:

$ npm install && npm test
建筑文档

(该项目的readme.md是由动词生成的,请不要直接编辑读书文件。必须在.verb.md readme模板中对redme进行任何更改。)

要生成读数,请运行以下命令:

$ npm install -g verbose/verb#dev verb-generate-readme && verb

相关项目

您可能对这些项目感兴趣:

  • 组装:将岩石从袜子中拿出来!组装使您快速创建Web项目……更多|首页
  • 金属史密斯:一个非常简单,可插入的静态站点生成器。 |首页
  • 动词:GitHub项目的文档生成器。动词非常强大,易于使用,并且被使用……更多|首页

贡献者

提交 贡献者
179 Jonschlinkert
13 Robertmassaioli
7 罗布拉赫
5 杜布
5 海姆德
3 aljopro
3 肖恩机器人
2 Reccanti
2 Onokumus
2 moozzyk
2 Ajaymathur
1 ajedi32
1 阿莱尔
1 凯撒
1 Ianstormtaylor
1 qm3ster
1 Zachwhaley

作者

乔恩·施林克特(Jon Schlinkert)

  • github概况
  • Twitter个人资料
  • LinkedIn个人资料

执照

版权所有©2023,Jon Schlinkert。根据MIT许可发布。


该文件是由2023年7月12日的V0.8.0 v0.8.0生成的。

下载源码

通过命令行克隆项目:

git clone https://github.com/jonschlinkert/gray-matter.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 gray matter https://www.zuozi.net/34277.html

BenchmarkDotNet
上一篇: BenchmarkDotNet
C
下一篇: C
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务