next.jsでLinariaをエイリアスでインポート時に発生するエラーの原因と解決策
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
next.jsでLinariaを利用時にエイリアスでインポートするとエラーになる対応をメモしました。
経緯
next.jsへLinariaを適応してプロジェクトの開発を行う検証をしていた際に エイリアスがうまく動かないことがわかったため解決方法を調査しました。
環境
- Mac OS Big SUR 11.3.1
- yarn 1.22.10
- Node 14.17.1
- Next.js 11.0.1
- React: 17.0.2
- Linaria 2.1.0
Linariaの導入
Linariaの導入は下記の記事て紹介している形で導入を行っています。
Next.jsのプロジェクトへLinaria(リナリア)を導入するまでの手順
Next.jsのプロジェクトへCSS-in-JS ライブラリ Linaria(リナリア)を導入するまでの手順をまとめています。
問題のコード
エラーが発生する問題のコードになります。
エイリアスでインポート時のコード
ここでエイリアスでインポートしている箇所がエラーになります。
tsx# src/pages/index.tsx
import Hoge from '@src/compoents/Hoge'
インポート先のコンポーネントのコード
インポート先のコードはlinariaを利用してコンポーネントを作成しています。
tsx# src/compoents/Hoge.tsx
import { styled } from 'linaria/react';
const Box = styled.div`
width: 200px;
`
export default function Home() {
return (
<Hoge>Hoge</Hoge>
)
}
tsconfig
tsconfigはpathsを追加しています。
json# tsconfig.json
"paths": {
"@src/*": ["./src/*"]
}
next.config.js
next.config.jsはnext-linariaを読み込んでいます。
エイリアス関連はデフォルトでエイリアスの設定が不要のため特に設定していません。
javascript# next.config.js
const withLinaria = require('next-linaria');
module.exports = withLinaria({});
発生するエラー
発生するエラーになります。
'@src/compoents/Hoge' のパスを解決できないと怒られます。
consoleerror - ./src/pages/index.tsx
Error: /Users/XXXX/linaria-sample/src/pages/index.tsx: An unexpected runtime error ocurred during dependencies evaluation:
/Users/XXXX/linaria-sample/node_modules/enhanced-resolve/lib/Resolver.js:147
if (err) throw err;
^
Error: Can't resolve '@src/compoents/Hoge' in '/Users/XXXX/linaria-sample/src/pages/index'
It may happen when your code or third party module is invalid or uses identifiers not available in Node environment, eg. window.
Note that line numbers in above stack trace will most likely not match, because Linaria needed to transform your code a bit.
ちなみにコンポーネントと関係ない他の設定ファイルなどのインポートは
エイリアスを利用してインポートができます。
next.config.jsへエイリアスの設定を追加して解決
next.config.jsへエイリアスの設定を追加して解決しました。
エイリアスの設定を追加
aliasとmodulesの設定を記述します。
modulesがないと動かないようです。
javascript# next.config.js
webpack: (config, _options) => {
config.resolve.modules.push(__dirname + '/src');
config.resolve.alias = {
...config.resolve.alias,
'@src': path.resolve(
__dirname,
'./src'
),
};
return config;
},
著書
articlenext.jsでLinariaをエイリアスでインポート時に発生するエラーの原因と解決策
articleNext.jsプロジェクトへCSS-in-JS ライブラリLinariaを導入する手順
articleNext.js・React Server Componentsが危険?async_hooksの脆弱性CVE-2025-59466を徹底解説
article2026年1月12日Next.jsとTypeScriptでSSGとSSRの型定義を使い方で整理 データ境界のベストプラクティス
article2025年12月21日Next.jsとTypeScriptでLintと整形をセットアップする手順 ESLint Stylelint PrettierとVSCode自動フォーマット
article2025年12月21日Next.jsをインストールしてTypeScript環境をセットアップする手順 最初に動かすまでを整理
article2025年12月21日Next.js 6から7へTypeScriptで移行を運用する手順 実施対応を再現できる形で整理
article2025年12月21日Next.js 5から6へTypeScriptで移行を運用する手順 実施対応を再現できる形で整理
articleshadcn/ui × TanStack Table 設計術:仮想化・列リサイズ・アクセシブルなグリッド
articleRemix のデータ境界設計:Loader・Action とクライアントコードの責務分離
articlePreact コンポーネント設計 7 原則:再レンダリング最小化の分割と型付け
articlePHP 8.3 の新機能まとめ:readonly クラス・型強化・性能改善を一気に理解
articleNotebookLM に PDF/Google ドキュメント/URL を取り込む手順と最適化
articlePlaywright 並列実行設計:shard/grep/fixtures で高速化するテストスイート設計術
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来
