0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.js(Turbopack)でresolveAliasを使用してモジュールを差し替える

0
Posted at

はじめに

テストやCI環境では別のモジュール(関数)を使用したい場合があるかと思います.
例えば,API通信を行うモジュールをテスト用のモジュールに差し替えたい場合などです.

Next.js v16以降ではTurbopackがデフォルトのバンドラーとなったため,今回はTurbopackでのモジュール差し替え方法を紹介します.

この記事でわかること

  • resolveAlias を使用してモジュールを差し替える方法

この記事で扱わないこと

  • Next.js の基本的なこと

詳細

Next.js と言っても,今回はほとんど TS 要素しかないです.
全体感としては,doSomething関数があって,その中でAPI通信を行うfetchSomeData関数を呼び出す形になります.このfetchSomeData関数を環境変数によって差し替えることを行います.

ファイル構造

├── app
│   └── page.tsx
├── lib
│   ├── doSomething.ts
│   ├── fetcher.mock.ts
│   └── fetcher.ts
├── next.config.ts
└── package.json

実装

lib/fetcher.ts が本来のAPI通信を行うモジュールで,lib/fetcher.mock.ts がテスト用のモジュールになります.doSomething関数の中でfetchSomeData関数を呼び出しています.

lib/fetcher.ts

export const fetchSomeData = (): string => {
  return "Fetch from API";
};

lib/fetcher.mock.ts

export const fetchSomeData = (): string => {
  return "Fetch from Mock";
};

lib/doSomething.ts

import { fetchSomeData } from "@/lib/fetcher";

export const doSomething = (): string => {
  const response = fetchSomeData();
  return `Result: ${response}`;
};

設定

次に,next.config.ts でresolveAliasを使用して,環境変数によってモジュールを差し替えます.
USE_MOCKという環境変数が設定されている場合に,lib/fetcher.mock.ts を使用するようにしています.
@/lib/fetcherからのインポートが@/lib/fetcher.mockに差し替えられます.

// next.config.ts
const nextConfig: NextConfig = {
  turbopack: process.env.USE_MOCK
    ? {
        resolveAlias: {
          "@/lib/fetcher": "@/lib/fetcher.mock",
        },
      }
    : {},
...

実行

doSomething関数を app/page.tsx で適当に呼び出します.
毎回環境変数を設定するのは大変なので,package.json にスクリプトを追加しときます.

...
"scripts": {
  "dev": "next dev",
  "dev:mock": "USE_MOCK=true next dev",
...

これで,npm run devで通常のAPI通信モジュールが使用され,npm run dev:mockでテスト用のモジュールが使用されるようになります.

実行結果

  • 動作環境

パッケージマネージャ: bun
Next.js バージョン: 16.1.1

  • bun dev の場合
Result: Fetch from API
  • bun dev:mock の場合
Result: Fetch from Mock

まとめ

今回は Next.js(Turbopack) で resolveAlias を使用してモジュールを差し替える方法を紹介しました.
next.config.ts で環境変数を使用して差し替えを行うことで,簡単にモジュールの切り替えが可能になります.

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?