設定

nuxt.config.jscontentプロパティで@nuxt/contentの設定ができます。

nuxt.config.js
export default {
  content: {
    // カスタム設定
  }
}

個々の設定項目を学ぶ前に、デフォルトの設定を確認してください。

デフォルト値とのマージ

すべての設定のプロパティを関数または静的な値 (プリミティブ、オブジェクト、配列、...) として定義できます。 関数で定義する場合、デフォルト値が第一引数として提供されます。

もしプロパティを定義するのに関数を使わない場合、設定されていない値はデフォルト値とマージします。 デフォルト値は非常に賢明なので、これはmarkdown.remarkPluginsmarkdown.rehypePluginsなどに便利です。 デフォルト値とのマージを回避したい場合、関数でのプロパティ定義を利用してください。

プロパティ一覧

apiPrefix

  • Type: String
  • Default: '/_content'

クライアントサイドのAPI呼び出しやSSE(Server-Sent Events)に利用されるルート

nuxt.config.js
content: {
  // $content api が localhost:3000/content-api で提供されます
  apiPrefix: 'content-api'
}

dir

  • Type: String
  • Default: 'content'

コンテンツを書くためのディレクトリ。絶対パスを指定できますが、相対パスの場合はNuxt srcDirで解決されます。

nuxt.config.js
content: {
  dir: 'my-content' //  my-content/ から contentを読み取ります
}

fullTextSearchFields

  • Type: Array
  • Default: ['title', 'description', 'slug', 'text']

全文検索を有効にするため、インデックス化する必要があるフィールド。検索についての詳細はここを参照してください

textは、ASTにパースされる前のMarkdownを含む特別なキーです。

nuxt.config.js
content: {
  // title と description だけを検索
  fullTextSearchFields: ['title', 'description']
}

nestedProperties

  • Type Array
  • Default: []
  • Version: >= v1.3.0

ドット表記やディープフィルタリングを処理するために、入れ子になったプロパティを登録します。

nuxt.config.js
content: {
  nestedProperties: ['categories.slug']
}

markdown

remarkrehypeを使って、MarkdownファイルをJSON ASTにコンパイルし、変数bodyに格納します。

以下の説明はremarkPluginsrehypePluginsの両方に当てはまります。

どのようにMarkdownをパースするか設定するには、次のようにします。

  • 新しいプラグインをデフォルトにする
nuxt.config.js
export default {
  content: {
    markdown: {
      remarkPlugins: ['remark-emoji']
    }
  }
}
  • デフォルトプラグインのオーバーライド
nuxt.config.js
export default {
  content: {
    markdown: {
      remarkPlugins: () => ['remark-emoji']
    }
  }
}
  • ローカルプラグインの利用
nuxt.config.js
export default {
  content: {
    markdown: {
      remarkPlugins: [
        '~/plugins/my-custom-remark-plugin.js'
      ]
    }
  }
}
  • 定義の中で直接オプションを指定する
nuxt.config.js
export default {
  content: {
    markdown: {
      remarkPlugins: [
        ['remark-emoji', { emoticon: true }]
      ]
    }
  }
}
  • キャメルケースでプラグインの名前を使ってオプションを指定する
nuxt.config.js
export default {
  content: {
    markdown: {
      // https://github.com/remarkjs/remark-external-links#options
      remarkExternalLinks: {
        target: '_self',
        rel: 'nofollow'
      }
    }
  }
}

新しいプラグインを追加するときは、必ずdependenciesにインストールしてください

yarn add remark-emoji
npm install remark-emoji
nuxt.config.js
export default {
  content: {
    markdown: {
      remarkPlugins: ['remark-emoji']
    }
  }
}

markdown.remarkPlugins

  • Type: Array
  • Default: ['remark-squeeze-paragraphs', 'remark-slug', 'remark-autolink-headings', 'remark-external-links', 'remark-footnotes']
  • Version: >= v1.4.0

remark pluginsを参照してください。

markdown.rehypePlugins

  • Type: Array
  • Default: ['rehype-minify-whitespace', 'rehype-sort-attribute-values', 'rehype-sort-attributes', 'rehype-raw']
  • Version: >= v1.4.0

rehype pluginsを参照してください。

markdown.basePlugins

非推奨です。代わりに markdown.remarkPluginsを関数として使用してください。

markdown.plugins

非推奨です。代わりに markdown. remarkPluginsを配列として使用してください。

markdown.prism.theme

  • Type: String
  • Default: 'prismjs/themes/prism.css'

PrismJSを使用してMarkdownコンテンツのコードのシンタックスハイライトを処理します。

これは、Nuxt.jsの設定で希望するPrismJSテーマを自動的にプッシュします。デフォルトのテーマとは異なるテーマを使用したい場合は、prism-themesから選んで変更します。

yarn add prism-themes
npm install prism-themes
nuxt.config.js
content: {
  markdown: {
    prism: {
      theme: 'prism-themes/themes/prism-material-oceanic.css'
    }
  }
}

テーマの組み込みを無効にしたい場合は、prismにfalseを設定します。:

nuxt.config.js
content: {
  markdown: {
    prism: {
      theme: false
    }
  }
}

yaml

  • Type: Object
  • Default: {}

このモジュールは、js-yamlを使用して.yaml.ymlファイルを解析します。ここでoptionsを確認できます。

json:trueオプションを強制することに注意してください。

xml

  • Type: Object
  • Default: {}

このモジュールは xml2js を用いて .xml ファイルを解析します。optionsはこちらで確認できます。

csv

  • Type: Object
  • Default: {}

このモジュールは、node-csvtojsonを使用してcsvファイルを解析します。ここでoptionsを確認できます。

デフォルトの設定

nuxt.config.js
export default {
  content: {
    apiPrefix: '_content',
    dir: 'content',
    fullTextSearchFields: ['title', 'description', 'slug', 'text'],
    nestedProperties: [],
    markdown: {
      remarkPlugins: [
        'remark-squeeze-paragraphs',
        'remark-slug',
        'remark-autolink-headings',
        'remark-external-links',
        'remark-footnotes'
      ],
      rehypePlugins: [
        'rehype-minify-whitespace',
        'rehype-sort-attribute-values',
        'rehype-sort-attributes',
        'rehype-raw'
      ],
      prism: {
        theme: 'prismjs/themes/prism.css'
      }
    },
    yaml: {},
    csv: {},
    xml: {}
  }
}