Javascript 使用“.js”文件从“.mdx”文件读取“frontmatter”中的值
我想用它来生成站点地图 但是,当我正常使用它时,如: next-sitemap.jsJavascript 使用“.js”文件从“.mdx”文件读取“frontmatter”中的值,javascript,node.js,next.js,mdxjs,Javascript,Node.js,Next.js,Mdxjs,我想用它来生成站点地图 但是,当我正常使用它时,如: next-sitemap.js module.exports={ 站点URL:'https://example.com', generateRobotsTxt:对, } 它为我的所有帖子生成站点地图 尽管如此,在我的.mdx文件中,我有一个已发布键,可以知道这篇文章是草稿还是准备发布,比如: export const meta = { title: 'Hello World', date: '2020-09-11T14:54
module.exports={
站点URL:'https://example.com',
generateRobotsTxt:对,
}
它为我的所有帖子生成站点地图
尽管如此,在我的.mdx
文件中,我有一个已发布
键,可以知道这篇文章是草稿
还是准备发布,比如:
export const meta = {
title: 'Hello World',
date: '2020-09-11T14:54:37.229Z',
tags: ['hello', 'world'],
author: 'Akshay Kadam',
published: false,
}
# Hello World
This is my first blog post, not yet ready to be published
如何从.mdx
文件中读取published
键,以便仅生成published:true
帖子的站点地图
注意:我无法使用,因为我的
.mdx
文件有一个导出的对象作为元数据。我使用了一个自定义的站点地图生成器,如:
脚本/build-sitemap.js
const fs=require('fs'))
常量glob=require('fast-glob')
const prettier=require('prettier')
const{getAllPublishedSays}=require('@/utils/article/getAllEssayPreviews')
const{getAllPublishedTutorials}=require('@/utils/tutorial/getAllTutorialPreviews')
const posts=[…GetAllPublishedSays(),…GetAllPublishedAutorials()]
常量配置={
站点URL:'https://akshaykadam.com',
changefreq:“每日”,
优先级:“0.7”,
lastmod:new Date().toISOString(),
}
const robotsTxt=`
用户代理:*
允许:/
主机:${config.siteUrl}
站点地图:${config.siteUrl}/Sitemap.xml
`.trim()
常量main=async()=>{
const prettierConfig=wait prettier.resolveConfig('./prettier.config.js')
常数站点地图=`
${员额
.map((post)=>{
返回`
${`${config.siteUrl}/${post.slug}`}
${`${config.changefreq}`}
${`${config.priority}`}
${`${config.lastmod}`}
`
})
.join(“”)}
`
const formatted=prettier.format(站点地图{
…prettierConfig,
语法分析器:“html”,
})
fs.writeFileSync('public/sitemap.xml',格式化)
fs.writeFileSync('public/robots.txt',robotsTxt)
}
main()
getAllEssayPreviews.ts
我使用了自定义的站点地图生成器,如: 脚本/build-sitemap.js
const fs=require('fs'))
常量glob=require('fast-glob')
const prettier=require('prettier')
const{getAllPublishedSays}=require('@/utils/article/getAllEssayPreviews')
const{getAllPublishedTutorials}=require('@/utils/tutorial/getAllTutorialPreviews')
const posts=[…GetAllPublishedSays(),…GetAllPublishedAutorials()]
常量配置={
站点URL:'https://akshaykadam.com',
changefreq:“每日”,
优先级:“0.7”,
lastmod:new Date().toISOString(),
}
const robotsTxt=`
用户代理:*
允许:/
主机:${config.siteUrl}
站点地图:${config.siteUrl}/Sitemap.xml
`.trim()
常量main=async()=>{
const prettierConfig=wait prettier.resolveConfig('./prettier.config.js')
常数站点地图=`
${员额
.map((post)=>{
返回`
${`${config.siteUrl}/${post.slug}`}
${`${config.changefreq}`}
${`${config.priority}`}
${`${config.lastmod}`}
`
})
.join(“”)}
`
const formatted=prettier.format(站点地图{
…prettierConfig,
语法分析器:“html”,
})
fs.writeFileSync('public/sitemap.xml',格式化)
fs.writeFileSync('public/robots.txt',robotsTxt)
}
main()
getAllEssayPreviews.ts
export const getAllPublishedEssays = (): Array<{
slug: string
module: any
}> =>
importAll(require.context('../../pages/essay/?rss', true, /\.mdx$/))
.filter((p: Post) => p.module.meta.published)
.sort((a: Post, b: Post) => dateSortDesc(a.module.meta.date, b.module.meta.date))