Skip to content

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),

しかし、これを維持し続けるのも難しいので、早く修正されてほしい。