comment-mark lets you seamlessly embed dynamic content into your Markdown using persistent HTML comment placeholders—no separate template files required!
npm install comment-mark
## Last updated
<!-- lastUpdated:start --><!-- lastUpdated:end -->
import fs from 'fs'
import { commentMark } from 'comment-mark'
let markdown = fs.readFileSync('README.md', 'utf8')
markdown = commentMark(markdown, {
lastUpdated: new Date().toISOString()
})
fs.writeFileSync('README.md', markdown)
## Last updated
<!-- lastUpdated:start -->2024-05-20T13:45:00.000Z<!-- lastUpdated:end -->
Most Markdown templating requires separate template files and a build step. comment-mark eliminates this complexity by allowing a single Markdown file to act as both the template and the output.
-
Project index: Automatically updates
README.md
fromprojects.json
on each Git commit. -
Minification Benchmarks: Inserts benchmarking results directly into
README.md
.
Here's a practical example showing how to auto-update a list of Git contributors in your README:
## Contributors
<!-- contributors:start --><!-- contributors:end -->
import fs from 'fs'
import { execSync } from 'child_process'
import { commentMark } from 'comment-mark'
let markdown = fs.readFileSync('README.md')
markdown = commentMark(markdown, {
contributors: execSync('git shortlog -se HEAD -- .').toString().trim()
})
fs.writeFileSync('README.md', markdown)
## Contributors
<!-- contributors:start -->
17 John Doe <john.doe@gmail.com>
5 Jane Smith <jane.smith@example.com>
<!-- contributors:end -->
-
contentStr
<string>
: The Markdown or HTML content. -
data
<Record<string, string | undefined | null>>
: Key-value pairs representing placeholders and their replacements.
Returns: <string>
: The original string with placeholders replaced by provided values.
Markdown generally supports basic HTML, and HTML comment pairs are a safe, unobtrusive way to mark placeholders.
Pairs ensure the placeholders remain intact after multiple updates, avoiding the need for separate source and distribution files.