【npmライブラリ作成/Next.js】Global CSS cannot be imported from within node_modules.

Next.js

自分で作成したライブラリをNext.jsにインストールした際に、Global CSS cannot be imported from within node_modules.というエラーが立ちはだかりました。

エラー内容

Global CSS cannot be imported from within node_modules.

つまり、何がNGかというと、JSファイルにCSSファイルをインポートするのがNG。こういうやつ↓

import '../index.css'

ちなみに、Next.jsのページを見ると、作成者・メンテナーがどうにかしろとのこと!
Next.jsには対応させたいので、どうにかすることにしました。

Reach out to the maintainer and ask for them to publish a compiled version of their dependency.
Compiled dependencies do not have references to CSS files, or any other files that require bundler-specific integrations.

メンテナーに連絡を取り、依存関係のコンパイルされたバージョンを公開するように依頼してください。コンパイルされた依存関係は、CSSファイルや、バンドラー固有の統合を必要とするその他のファイルへの参照を持ちません。

CSS Imported by a Dependency(https://nextjs.org/docs/messages/css-npm)

対応方法

思いついた手段は3つ。

  • CSSファイルを使用せず、すべてのスタイルをタグのstyle={}に組み込む
  • CSS in JSやなどのスタイル系ライブラリを使う
  • CSSファイルも含めてバンドルする(1つのJSファイルにする)

結局、3つ目のバンドルする方法を選択しました。
理由は、今回作成したライブラリはアニメーションを使用していたので、styleタグだけで実装できそうにないこと。また、CSS in JSなどのライブラリをわざわざ導入するのは面倒だし、あまり依存するライブラリを増やしたくなかったからです。

バンドラー何にした?

最初はwebpackを使用してバンドルしました。でも、ライブラリ作成には、webpackでCSSファイルを含めてバンドルするのはやめた方がいいです。

結局、うまくいったのはrollupでした。一般的にも、ライブラリのバンドルにはwebpackよりrollupが良いと言われているようです。

ちなみに、webpackでCSSファイルを含めたライブラリのバンドルをおすすめしないのは、下記記事のエラーが発生するためです。rollupの設定ファイルも書いておいたので参考にしてみてください。

タイトルとURLをコピーしました