@vuepress-plume/plugin-auto-frontmatter
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-rc.53 • Public • Published

@vuepress-plume/plugin-auto-frontmatter

自动生成 *.md 文件的 frontmatter 配置。

Install

npm install @vuepress-plume/plugin-auto-frontmatter
# or
pnpm add @vuepress-plume/plugin-auto-frontmatter
# or
yarn add @vuepress-plume/plugin-auto-frontmatter

Usage

// .vuepress/config.[jt]s
import { autoFrontmatterPlugin } from '@vuepress-plume/plugin-auto-frontmatter'

export default {
  // ...
  plugins: [
    autoFrontmatterPlugin({
      formatter: {
        createTime(formatTime, file, matter) {
          if (formatTime)
            return formatTime
          return file.createTime
        }
      }
    })
  ]
  // ...
}

autoFrontmatterPlugin([options])

options

{ include?: string | string[]; exclude?: string | string[]; formatter: Formatter }

  • include include 匹配字符串或数组,匹配需要自动生成 frontmatter 的 md文件。 默认预设为 ['**/*.md']

  • exclude exclude 排除不需要的文件 默认预设为: ['!.vuepress/', '!node_modules/']

  • formatter 配置frontmatter每个字段的生成规则。

    interface MarkdownFile {
      filepath: string
      relativePath: string
      content: string
      createTime: Date
      stats: fs.Stats
    }
    
    interface FormatterFn<T = any, K = object> {
      (value: T, file: MarkdownFile, data: K): T
    }
    
    type FormatterObject<K = object, T = any> = Record<
      string,
      FormatterFn<T, K>
    >
    
    type FormatterArray = {
      include: string | string[]
      formatter: FormatterObject
    }[]
    
    type Formatter = FormatterObject | FormatterArray
    
    /**
     * formatterObj 对象中的 key 即为 frontmatter 配置中的key
     * 其方法返回的值将作为 frontmatter[key] 的值
     * .md
     * ---
     * createTime: 2022-03-26T11:46:50.000Z
     * ---
     */
    const formatterObj: Formatter = {
      createTime(formatTime, file, matter) {
        if (formatTime)
          return formatTime
        return file.createTime
      }
    }
    
    const formatterArr: Formatter = [
      {
        // 更精细化的匹配某个 md文件,支持glob 匹配字符串
        include: '**/{README,index}.md',
        // formatter 仅对 glob命中的文件有效
        formatter: {
          home(value, file, matter) {
            return value
          }
        },
      },
      {
        // 通配,如果文件没有被其他精细glob命中,
        // 则使用 通配 formatter
        // 如果是数组,必须有且用一个 include 为 * 的 项
        include: '*',
        formatter: {
          title(title) {
            return title || '默认标题'
          }
        }
      }
    ]

Why ?

  • 为什么需要这个插件?

    有时候在开发一些主题时,期望使用户更专注于内容的编写,尽可能减少配置性的工作,可以将一些重复性的必要的配置 直接通过本插件自动生成。

Readme

Keywords

none

Package Sidebar

Install

npm i @vuepress-plume/plugin-auto-frontmatter

Weekly Downloads

154

Version

1.0.0-rc.53

License

MIT

Unpacked Size

11.5 kB

Total Files

14

Last publish

Collaborators

  • pengzhanbo