質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Markdown

Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2645閲覧

remark-highlight.js でブログのコードにシンタックスハイライトを反映させたい

To-bu

総合スコア8

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Markdown

Markdownは、文書の構造、修飾情報を記述するための軽量マークアップ言語です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/09/21 03:07

前提・実現したいこと

Next.jsでブログを作っています.

remark で Markdown をレンダリングする際に remark-highlight.js でコードにシンタックスハイライトを反映させたいです.

発生している問題・エラーメッセージ

npm install remark-highlight.js を行い,以下のようにコードを書きました.

該当のソースコード

typescript

1// lib/posts.ts 2 3import fs from 'fs' 4import path from 'path' 5import matter from 'gray-matter' 6import remark from 'remark' 7import html from 'remark-html' 8import highlight from 'remark-highlight.js' 9 10export async function getPostData(id: string) { 11 const fullPath = path.join(postsDirectory, `${id}.md`) 12 const fileContents = fs.readFileSync(fullPath, 'utf8') 13 14 // Use gray-matter to parse the post metadata section 15 const matterResult = matter(fileContents) 16 17 // Use remark to convert markdown into HTML string 18 const processedContent = await remark() 19 .use(highlight) 20 .use(html) 21 .process(matterResult.content) 22 const contentHtml = processedContent.toString() 23 24 // Combine the data with the id 25 return { 26 id, 27 contentHtml, 28 ...(matterResult.data as { date: string; title: string; coverImage: string }) 29 } 30}

Markdown

1~~~javascript 2ReactDOM.render( 3 <h1>Hello, world!</h1>, 4 document.getElementById('root') 5); 6~~~

もちろん Markdown のプレビューではシンタックスは反映されますが,ブログには反映されませんでした.

試したこと

import highlight from 'remark-highlight.js'

を記述した際に,

「モジュール 'remark-highlight.js' の宣言ファイルが見つかりませんでした。」

という警告が出たので global.d.ts に

declare module 'remark-highlight.js';

を追記しました.追記したところ,警告は無くなりましたが結果は変わりませんでした.

補足情報(FW/ツールのバージョンなど)

バージョンは以下のようになっています.

json

1 : 2 "gray-matter": "^4.0.2", 3 "next": "^9.5.3", 4 "react": "16.13.1", 5 "react-dom": "16.13.1", 6 "remark": "^12.0.1", 7 "remark-highlight.js": "^6.0.0", 8 "remark-html": "^12.0.0" 9 :

どなたかご教授いただけますと幸いです.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もしかすると、そのパッケージは<code>タグなどにクラス名を付与してくれるだけで、
実際に色をつけるには別途テーマを読み込む必要があるのではないでしょうか?

例えば、これが良い方法なのか分かりませんが、

npm install highlight.js

を実行後、_app.tsx内に

import 'highlight.js/styles/tomorrow-night.css';

のように書いて試してみてください。

投稿2020/09/21 09:27

nskhei

総合スコア704

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

To-bu

2020/09/21 13:04

回答ありがとうございます。 nskhei様が仰ったようにしたところうまくいきました! パッケージのreadmeをもっとしっかりと読むべきでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問