vuepress-plugin-sitemapのexcludeがwildcard(*)に対応してなかったので対応させた
対象プラグイン
現時点でver 2.3.1
実現したかったこと
除外URLを *
で一括指定したかった。
[
"sitemap",
{
hostname: "https://hoge.com",
exclude: [
"*/page/*", // これ
"/tag/*", // これ
"/404.html",
],
...
},
],
できるようにする
- まず
patch-package
をインストール
yarn add patch-package postinstall-postinstall
- npm scriptsの追加
yarn install
時にパッチが自動で適用されるようにする。
"scripts": {
...
"postinstall": "patch-package"
}
- vuepress-plugin-sitemapの修正
node_modules/vuepress-plugin-sitemap/index.js
を修正する
module.exports = (options, context) => {
const {
(省略)
} = options;
// ★追加コード
const excludePatterns = exclude.map(pattern => {
if (pattern === '*') {
return /./;
}
return new RegExp('^' + pattern.replace(/[*]/g, '.*') + '$');
});
return {
generated() {
(省略)
pages.forEach(page => {
const fmOpts = page.frontmatter.sitemap || {};
const metaRobots = (page.frontmatter.meta || []).find(meta => meta.name === 'robots');
const excludePage = metaRobots
? (metaRobots.content || '').split(/,/).map(x => x.trim()).includes('noindex')
: fmOpts.exclude === true;
// ★追加
const pathMatchesExclude = excludePatterns.some(pattern => pattern.test(page.path));
if (excludePage || pathMatchesExclude) {
exclude.push(page.path);
}
// 元のコード
// if (excludePage) {
// exclude.push(page.path)
// }
(省略)
- パッチファイルの作成
npx patch-package vuepress-plugin-sitemap
/pathces/vuepress-plugin-sitemap+<VERSION>.patch
ファイルが生成される。
- 適用
rm -rf node_modules
yarn install
感想
これで期待通り */page/*
と /tag/*
が sitemap.xmlから除外されてスッキリした。
このプラグイン4年以上更新されてないのか...
以上