Utwórz wtyczkę remark do wyodrębniania czasu czytania MDX
Przewodnik po tworzeniu wtyczki remark, która udostępni dane o czasie czytania podczas importowania plików MDX jako modułów ES.
Remark to potężny procesor markdown, który można wykorzystać do tworzenia niestandardowych wtyczek do przekształcania treści markdown. Podczas parsowania plików markdown przy użyciu remark, treść jest przekształcana w abstrakcyjne drzewo składniowe (AST), które można manipulować za pomocą wtyczek.
Dla lepszego doświadczenia użytkownika, często wyświetla się szacunkowy czas czytania artykułu. W tym przewodniku stworzymy wtyczkę remark, aby wyodrębnić dane o czasie czytania z pliku MDX i udostępnić je podczas importowania pliku MDX jako modułu ES.
Rozpocznijmy
Zacznijmy od stworzenia pliku MDX:
Zakładając, że używamy Vite jako bundlera, z oficjalną wtyczką @mdx-js/rollup
do przekształcania plików MDX, możemy zaimportować plik MDX jako moduł ES. Konfiguracja Vite powinna wyglądać tak:
Jeśli zaimportujemy plik MDX jako moduł ES, treść będzie obiektem, którego właściwość default
zawiera skompilowany JSX. Na przykład:
Wynik będzie wyglądać następująco:
Gdy już mamy taki wynik, jesteśmy gotowi, aby stworzyć wtyczkę remark.
Tworzenie wtyczki remark
Zobaczmy, co musimy zrobić, aby osiągnąć cel:
- Wyodrębnić treść MDX do tekstu, aby obliczyć czas czytania.
- Obliczyć czas czytania.
- Dołączyć dane o czasie czytania do treści MDX, aby były dostępne podczas importowania pliku MDX jako modułu ES.
Na szczęście istnieją już biblioteki, które pomogą nam w obliczeniu czasu czytania i podstawowych operacjach na AST:
reading-time
do obliczania czasu czytania.mdast-util-to-string
do konwertowania AST MDX na tekst.estree-util-value-to-estree
do konwertowania danych o czasie czytania na węzeł ESTree.
Jeśli jesteś użytkownikiem TypeScript, być może będziesz musiał również zainstalować te paczki dla definicji typów:
@types/mdast
dla definicji typów węzła głównego MDX.unified
dla definicji typów wtyczki.
Kiedy mamy już zainstalowane paczki, możemy przystąpić do tworzenia wtyczki:
Jak widać, wtyczka po prostu wyodrębnia treść MDX do tekstu i oblicza czas czytania. Teraz musimy dołączyć dane o czasie czytania do treści MDX i wygląda to na dość skomplikowane. Ale jeśli przyjrzymy się innym wspaniałym bibliotekom, takim jak remark-mdx-frontmatter, możemy znaleźć sposób na to:
Zwróć uwagę na type: 'mdxjsEsm'
w powyższym kodzie. Jest to typ węzła używany do serializacji MDX ESM. Powyższy kod dołącza dane o czasie czytania za pomocą nazwy readingTime
do treści MDX, co przyniesie następujący wynik po zaimportowaniu pliku MDX jako modułu ES:
Jeśli potrzebujesz zmienić nazwę danych o czasie czytania, możesz zaktualizować właściwość name
węzła Identifier
.
Wsparcie dla TypeScript
Aby uczynić wtyczkę jeszcze bardziej przyjazną dla developerów, możemy wprowadzić ostatni szlif, rozszerzając definicje typów MDX:
Teraz, po zaimportowaniu pliku MDX, TypeScript rozpozna właściwość readingTime
:
Wniosek
Mam nadzieję, że ten przewodnik pomoże ci w lepszym doświadczeniu podczas pracy z plikami MDX. Dzięki tej wtyczce remark, możesz bezpośrednio korzystać z danych o czasie czytania, a nawet skorzystać z tree-shaking ESM dla lepszej wydajności.