feat: add sitemap gen

This commit is contained in:
camera-2018
2023-07-23 02:20:52 +08:00
parent c43e32de1e
commit 2761331726
3 changed files with 102 additions and 2 deletions

View File

@@ -4,6 +4,11 @@ import mathjax3 from 'markdown-it-mathjax3';
import { main_sidebar, chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8, chapter9 } from './sidebar.js'; import { main_sidebar, chapter2, chapter3, chapter4, chapter5, chapter6, chapter7, chapter8, chapter9 } from './sidebar.js';
import { nav } from './nav.js'; import { nav } from './nav.js';
import PanguPlugin from 'markdown-it-pangu' import PanguPlugin from 'markdown-it-pangu'
import { createWriteStream } from 'node:fs'
import { resolve } from 'node:path'
import { SitemapStream } from 'sitemap'
const links = []
const customElements = [ const customElements = [
'mjx-container', 'mjx-container',
@@ -152,5 +157,23 @@ export default withMermaid({
}, },
}, },
}, },
transformHtml: (_, id, { pageData }) => {
if (!/[\\/]404\.html$/.test(id))
links.push({
// you might need to change this if not using clean urls mode
url: pageData.relativePath.replace(/((^|\/)index)?\.md$/, '$2'),
lastmod: pageData.lastUpdated
})
},
buildEnd: async ({ outDir }) => {
const sitemap = new SitemapStream({
hostname: 'https://hdu-cs.wiki/'
})
const writeStream = createWriteStream(resolve(outDir, 'sitemap.xml'))
sitemap.pipe(writeStream)
links.forEach((link) => sitemap.write(link))
sitemap.end()
await new Promise((r) => writeStream.on('finish', r))
},
}) })

78
package-lock.json generated
View File

@@ -11,7 +11,8 @@
"@jupyterlab/theme-light-extension": "^4.0.3", "@jupyterlab/theme-light-extension": "^4.0.3",
"@vueuse/core": "^10.2.1", "@vueuse/core": "^10.2.1",
"markdown-it": "^13.0.1", "markdown-it": "^13.0.1",
"markdown-it-pangu": "^1.0.2" "markdown-it-pangu": "^1.0.2",
"sitemap": "^7.1.1"
}, },
"devDependencies": { "devDependencies": {
"@mermaid-js/mermaid-mindmap": "^9.3.0", "@mermaid-js/mermaid-mindmap": "^9.3.0",
@@ -1377,6 +1378,11 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==",
"dev": true "dev": true
}, },
"node_modules/@types/node": {
"version": "17.0.45",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz",
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
},
"node_modules/@types/prop-types": { "node_modules/@types/prop-types": {
"version": "15.7.5", "version": "15.7.5",
"resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz", "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz",
@@ -1392,6 +1398,14 @@
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
}, },
"node_modules/@types/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/@types/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/scheduler": { "node_modules/@types/scheduler": {
"version": "0.16.3", "version": "0.16.3",
"resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz", "resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz",
@@ -1742,6 +1756,11 @@
"integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==",
"dev": true "dev": true
}, },
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz",
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"node_modules/argparse": { "node_modules/argparse": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
@@ -3516,6 +3535,11 @@
"postcss": "^8.3.11" "postcss": "^8.3.11"
} }
}, },
"node_modules/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"node_modules/scheduler": { "node_modules/scheduler": {
"version": "0.23.0", "version": "0.23.0",
"resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz", "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz",
@@ -3567,6 +3591,24 @@
"vscode-textmate": "^8.0.0" "vscode-textmate": "^8.0.0"
} }
}, },
"node_modules/sitemap": {
"version": "7.1.1",
"resolved": "https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz",
"integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==",
"dependencies": {
"@types/node": "^17.0.5",
"@types/sax": "^1.2.1",
"arg": "^5.0.0",
"sax": "^1.2.4"
},
"bin": {
"sitemap": "dist/cli.js"
},
"engines": {
"node": ">=12.0.0",
"npm": ">=5.6.0"
}
},
"node_modules/slick": { "node_modules/slick": {
"version": "1.12.2", "version": "1.12.2",
"resolved": "https://registry.npmmirror.com/slick/-/slick-1.12.2.tgz", "resolved": "https://registry.npmmirror.com/slick/-/slick-1.12.2.tgz",
@@ -5568,6 +5610,11 @@
"integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==",
"dev": true "dev": true
}, },
"@types/node": {
"version": "17.0.45",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz",
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
},
"@types/prop-types": { "@types/prop-types": {
"version": "15.7.5", "version": "15.7.5",
"resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz", "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.5.tgz",
@@ -5583,6 +5630,14 @@
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
}, },
"@types/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/@types/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==",
"requires": {
"@types/node": "*"
}
},
"@types/scheduler": { "@types/scheduler": {
"version": "0.16.3", "version": "0.16.3",
"resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz", "resolved": "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz",
@@ -5816,6 +5871,11 @@
"integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==",
"dev": true "dev": true
}, },
"arg": {
"version": "5.0.2",
"resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz",
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"argparse": { "argparse": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
@@ -7293,6 +7353,11 @@
"postcss": "^8.3.11" "postcss": "^8.3.11"
} }
}, },
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"scheduler": { "scheduler": {
"version": "0.23.0", "version": "0.23.0",
"resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz", "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.0.tgz",
@@ -7335,6 +7400,17 @@
"vscode-textmate": "^8.0.0" "vscode-textmate": "^8.0.0"
} }
}, },
"sitemap": {
"version": "7.1.1",
"resolved": "https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz",
"integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==",
"requires": {
"@types/node": "^17.0.5",
"@types/sax": "^1.2.1",
"arg": "^5.0.0",
"sax": "^1.2.4"
}
},
"slick": { "slick": {
"version": "1.12.2", "version": "1.12.2",
"resolved": "https://registry.npmmirror.com/slick/-/slick-1.12.2.tgz", "resolved": "https://registry.npmmirror.com/slick/-/slick-1.12.2.tgz",

View File

@@ -11,7 +11,8 @@
"@jupyterlab/theme-light-extension": "^4.0.3", "@jupyterlab/theme-light-extension": "^4.0.3",
"@vueuse/core": "^10.2.1", "@vueuse/core": "^10.2.1",
"markdown-it": "^13.0.1", "markdown-it": "^13.0.1",
"markdown-it-pangu": "^1.0.2" "markdown-it-pangu": "^1.0.2",
"sitemap": "^7.1.1"
}, },
"devDependencies": { "devDependencies": {
"@mermaid-js/mermaid-mindmap": "^9.3.0", "@mermaid-js/mermaid-mindmap": "^9.3.0",