🕌
Global CSS cannot be imported from within node_modules の対処方法(Next.js)
errorの原因
Next.jsでnode_modulesのファイルがcssファイルをインポートした際に起こるエラーです。
解決方法
エラーの原因であるcssのインポートを取り除いて上げることで解決します。
こちらのパッケージを利用することでnode_moduleから.less/.css/.scss/.sass/.stylのインポートを取り除いてくれます。
パッケージを利用するとインポートされるはずだったcssが適応されなくなるので、自分でインポートしましょう。
パッケージのinstall
cmd
npm install next-remove-imports
# or
yarn add next-remove-imports
パッケージの使用方法
next.config.jsに以下の記述を追加します。
next.config.jsが存在しない場合にはプロジェクト直下に追加を行ってください。
// next.config.js
const removeImports = require('next-remove-imports')({
test: /node_modules([\s\S]*?)\.(tsx|ts|js|mjs|jsx)$/,
matchImports: "\\.(less|css|scss|sass|styl)$"
})
module.exports = removeImports({
webpack(config, options) {
return config
},
})
cssの適応
ここまでで目的のnode_moduleは利用できるようになりますが、cssは適応されなくなっています。改めてcssをインポートしましょう。以下は公式の例です。
Import styles from node_modules
For importing CSS required by a third party component, you can do so in your component. For example:
// components/ExampleDialog.js
import { useState } from 'react'
import { Dialog } from '@reach/dialog'
import VisuallyHidden from '@reach/visually-hidden'
import '@reach/dialog/styles.css'
function ExampleDialog(props) {
const [showDialog, setShowDialog] = useState(false)
const open = () => setShowDialog(true)
const close = () => setShowDialog(false)
return (
<div>
<button onClick={open}>Open Dialog</button>
<Dialog isOpen={showDialog} onDismiss={close}>
<button className="close-button" onClick={close}>
<VisuallyHidden>Close</VisuallyHidden>
<span aria-hidden>×</span>
</button>
<p>Hello there. I am a dialog</p>
</Dialog>
</div>
)
}
Discussion