1
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?

More than 1 year has passed since last update.

【備忘録】Nuxtのaliasに注意する

Last updated at Posted at 2022-03-20

この記事について

NuxtでTypeScriptを使っているときに、importが上手くいかなくて困ったので、メモを残しておくことにする。

NuxtのaliasはTypeScriptには効かない

Nuxtにはデフォルトで~@などのaliasが設定されている。

しかし、このaliasは、JavaScriptやCSSでは機能するが、TypeScriptでは機能しない。
よって、以下のようなパスの指定はエラーになる。

index.vue
<template>
...
</template>

<script lang="ts"> // 言語にTypeScriptを指定
import { TestComponent } from '@/components/TestComponent.vue'; // エラー
...
</script>

tsconfig.jsonpathsに自分でaliasを定義すれば、上記のようなパスの指定が可能になる。
公式にも以下の注意書きがあったが、見落としていた。

TypeScript を使っていて、自分で定義したエイリアスを TypeScript ファイル内で使用したい場合は、tsconfig.json 内の paths オブジェクトにエイリアスを追加する必要があります。

serverMiddlewareでは相対パスしか使えない

serverMiddlewareを使用するために、以下のように設定したとする。

nuxt.config.ts
export default {
  serverMiddleware: ['../server']
}

上記のように設定した場合、serverディレクトリ配下でのパス指定はすべて相対パスで行われる必要がある。
tsconfig.jsonpathsが設定されていれば、エディタ上ではエラーにならないが、起動すると以下のようなエラーが表示される。

ServerMiddleware Error: Cannot find module '@/server/utils'

これについて、同様の質問がIssuesに上がっていたので確認してみたところ、以下のようなコメントを見つけた。

@ is a Webpack alias for the project root. Server middleware are loaded by Node, you must use relative paths.

Nuxt3系で解決されるという話もあるみたいだが、現状では相対パスを使うしかなさそう。

1
0
1

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
1
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?