• #Nuxt
  • #Vite
  • #トラブルシューティング

Nuxt開発サーバーの「Failed to resolve dependency」警告を解消する

問題

Nuxt + @nuxt/content を使用したプロジェクトで pnpm dev を実行すると、以下のような警告が大量に表示される。

WARN  Failed to resolve dependency: @nuxtjs/mdc > remark-emoji, present in client 'optimizeDeps.include'
WARN  Failed to resolve dependency: @nuxtjs/mdc > remark-mdc, present in client 'optimizeDeps.include'
WARN  Failed to resolve dependency: @nuxtjs/mdc > remark-rehype, present in client 'optimizeDeps.include'
WARN  Failed to resolve dependency: @nuxtjs/mdc > rehype-raw, present in client 'optimizeDeps.include'
WARN  Failed to resolve dependency: @nuxtjs/mdc > parse5, present in client 'optimizeDeps.include'
WARN  Failed to resolve dependency: @nuxtjs/mdc > unist-util-visit, present in client 'optimizeDeps.include'
WARN  Failed to resolve dependency: @nuxtjs/mdc > unified, present in client 'optimizeDeps.include'
WARN  Failed to resolve dependency: @nuxtjs/mdc > debug, present in client 'optimizeDeps.include'

原因

@nuxtjs/mdc(Nuxt Content が内部で使用する MDC パーサー)が、Vite の optimizeDeps.include にこれらのパッケージを追加している。

しかし、これらのパッケージはサーバーサイドでのみ使用される Markdown パース用のライブラリであり、クライアントサイドのバンドルには含まれない。そのため、Vite がクライアント用に事前最適化しようとしても解決できず、警告が発生する。

なぜ実害はないのか

  • remark-*rehype-*unified などは Markdown をパースするためのパッケージ
  • Nuxt Content は SSR(サーバーサイドレンダリング)でコンテンツをパースする
  • 本番ビルド時は静的 HTML に変換されるため、これらのパッケージはビルド時にのみ使われる
  • 警告が出ていても、ビルド自体は正常に完了する(✔ Vite client built が表示される)

対処法

nuxt.config.tsvite.optimizeDeps.exclude を追加して、これらのパッケージをクライアント側の最適化対象から明示的に除外する。

// nuxt.config.ts
export default defineNuxtConfig({
  // ... 他の設定 ...

  vite: {
    optimizeDeps: {
      exclude: [
        // These are server-side only packages used by @nuxtjs/mdc
        // Excluding them removes "Failed to resolve dependency" warnings
        'remark-emoji',
        'remark-mdc',
        'remark-rehype',
        'rehype-raw',
        'parse5',
        'unist-util-visit',
        'unified',
        'debug'
      ]
    }
  },

  // ... 他の設定 ...
})

結果

設定追加後、pnpm dev を再起動すると警告が表示されなくなる。

補足:本番環境への影響

このプロジェクトでは cloudflare-pages-static プリセットを使用しており、本番ビルド時にはすべてのページが静的 HTML に変換される。そのため:

  • これらのパッケージはビルド時(サーバー側)でのみ使用される
  • クライアントに配信される JavaScript バンドルには含まれない
  • 本番環境のパフォーマンスには一切影響しない

この対処は開発時の警告を消すためのものであり、本番環境の動作には影響しない。