当前位置: 首页 > Web前端 > vue.js

Gridsome中的Transformer转换器

时间:2023-03-31 22:50:55 vue.js

Transformer转换器用于解析文件内容。只要安装在package.json中,Gridsome就会自动使用这个转换器。转换器API指定Mime类型transformer.mimeTypes()转换器必须具有静态mimeTypes()方法,该方法返回转换器可以解析的mime类型数组。解析内容transformer.parse(source)转换器还必须有一个parse()方法,用于解析内容。自定义GraphQL字段transformer.extendNodeType()Transformer还可以通过实现extendNodeType()方法来扩展GraphQL中的字段。例子classTransformer{staticmimeTypes(){return['application/json']}parse(source){const{title,...fields}=JSON.parse(source)return{title,fields}}extendNodeType({graphql}){return{//transformed节点的自定义GraphQL字段}}}module.exports=Transformer@gridsome/transformer-remark插件源码分析Gridsome通过remark转换Markdown转换器。通过分析@gridsome/transformer-remark插件的源码,可以知道markdown文件中的信息可以通过页面的graphql查询语句获取。parse()方法constparse=require('gray-matter')classRemarkTransformer{parse(source){const{data,content,excerpt}=parse(source,this.options.grayMatter||{})//如果没有titlewasfoundbygray-matter,//尝试在内容中找到第一个if(!data.title){consttitle=content.trim().match(/^#+\s+(.*)/)if(title)data.title=title[1]}return{content,excerpt,...data}}}从RemarkTransformer的parse()方法可以知道@gridsome/transformer-remark插件是通过另一个插件gray-matter来解析markdown内容。关于gray-mattergray-matter的作用是从字符串或者文件中解析出front-matter内容。默认解析YAML格式的前置内容。您可以设置自定义解析选项。front-matter的YAML格式如下:---title:Helloauthor:dora---

Helloworld!

经gray-matter解析后返回:{content:'

Helloworld!

',data:{title:'Hello',author:'dora'}}gray-matter也可以解析JSON格式的前端内容:---{title:'Hello',author:'朵拉'}---#世界,您好!解析后返回:{content:'#Helloworld!',data:{title:'Hello',author:'dora'}}extendNodeType()methodextendNodeType(){return{content:{//通过remark-parseand,//gridsome.config.js文件中传入的transformer选项,//处理gray-matter解析的内容。},headings:{//获取content内容中的所有header数据,//包含的字段为{depth,anchor,value}},timeToRead:{//阅读时间,默认每分钟230个字符}}}转换示例markdown内容如下:---title:Testdate:2019-12-26author:Dora---#H1TestTitle这是**markdown**文件的内容区,请`here`分享与大家分享您的优秀创意!graphQL查询语句如下:query($id:ID!){post(id:$id){titlecontentdate(format:"YYYY-MM-DD")headings{depthanchorvalue}}}}转换后返回的数据:data:{post:{title:"Test",content:`H1测试标题?

这里是ma??rkdown文件的内容区,请这里与大家分享你的优秀创意!

?`,日期:“2019-12-26”,标题:[{深度:1,锚点:“#h1-test-title”,值:“H1TestTitle"}],}}用于在gridsome中转换其他文件类型的一体式TransformerTransformer@gridsome/transformer-yaml:Gridsome的YAMLTransformer@gridsome/transformer-json:Gridsome的JSONTransformergridsome-transformer-vue:Gridsome的VUE转换器...