Astroでremark-wiki-linkを導入するとCannot read properties of undefinedエラーが発生する問題の回避策
astro.config.js で@portaljs/remark-wiki-linkを設定する。
export default defineConfig({ markdown: { remarkPlugins: [ wikiLinkPlugin, ], },});こうするとObsidianで書いているようなWikiスタイルのリンクを扱ってくれるようになるはずだが、Astro 4と remark-wiki-link@1.2 の組み合わせでは以下のようなエラーが発生してビルドに失敗する。
Cannot read properties of undefined (reading 'data')これはAstroでObsidianのwikiリンク形式を使用するによると、Astro 4で入った変更に remark-wiki-link が対応できていないためらしい。以下のパッチを node_modules/@portaljs/remark-wiki-link/dist/index.js に当てれば解決する。
--- node_modules/@portaljs/remark-wiki-link/dist/index-old.js 2024-11-19 23:22:09.638945396 +0900+++ node_modules/@portaljs/remark-wiki-link/dist/index-new.js 2024-11-19 23:19:10.453670858 +0900@@ -357,11 +357,11 @@ current.data.alias = alias; } function exitWikiLink(token) {- var wikiLink = this.exit(token);- var _wikiLink$data = wikiLink.data,- isEmbed = _wikiLink$data.isEmbed,- target = _wikiLink$data.target,- alias = _wikiLink$data.alias;+ var wikiLink = top(this.stack);+ const {+ data: { isEmbed, target, alias },+ } = wikiLink;+ this.exit(token); // eslint-disable-next-line no-useless-escape var wikiLinkWithHeadingPattern = /^((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)(#(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/; var _target$match = target.match(wikiLinkWithHeadingPattern),しかし、これを維持し続けるのも難しいので、早く修正されてほしい。