Absolute Imports and Module Path Aliases
Examples
Next.js は、tsconfig.json
およびjsconfig.json
ファイルの"paths"
および"baseUrl"
の options を組み込みでサポートしています。"
これらの options を使用すると、プロジェクトのディレクトリを絶対 paths にエイリアス設定でき、import modules を容易にします。例えば:
// before
import { Button } from "../../../components/button";
// after
import { Button } from "@/components/button";
Good to know:
create-next-app
は、これらの options を設定するように prompt します。
Absolute Imports
baseUrl
設定オプションは、プロジェクトの root から直接 import することを可能にします。
この設定の一例:
tsconfig.json
{
"compilerOptions": {
"baseUrl": "."
}
}
components/button.tsx
export default function Button() {
return <button>Click me</button>
}
components/button.js
export default function Button() {
return <button>Click me</button>
}
app/page.tsx
import Button from 'components/button'
export default function HomePage() {
return (
<>
<h1>Hello World</h1>
<Button />
</>
)
}
app/page.js
import Button from 'components/button'
export default function HomePage() {
return (
<>
<h1>Hello World</h1>
<Button />
</>
)
}
Module Aliases
baseUrl
path の設定に加えて、"paths"
オプションを使用してモジュールの paths を「エイリアス」にすることができます。
たとえば、以下の設定では、@/components/*
を components/*
にマッピングします:
tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/components/*": ["components/*"]
}
}
}
components/button.tsx
export default function Button() {
return <button>Click me</button>
}
components/button.js
export default function Button() {
return <button>Click me</button>
}
app/page.tsx
import Button from '@/components/button'
export default function HomePage() {
return (
<>
<h1>Hello World</h1>
<Button />
</>
)
}
app/page.js
import Button from '@/components/button'
export default function HomePage() {
return (
<>
<h1>Hello World</h1>
<Button />
</>
)
}
""paths"
"のそれぞれは、baseUrl
の位置に対して相対的になっています。例えば:
// tsconfig.json or jsconfig.json
{
"compilerOptions": {
"baseUrl": "src/",
"paths": {
"@/styles/*": ["styles/*"],
"@/components/*": ["components/*"]
}
}
}
// pages/index.js
import Button from "@/components/button";
import "@/styles/styles.css";
import Helper from "utils/helper";
export default function HomePage() {
return (
<Helper>
<h1>Hello World</h1>
<Button />
</Helper>
);
}