Nest.jsをインストールしたが起動しなかった

2024/05/24に公開

何が起きたか

ドキュメント通りにコマンドを進めたが、インストール後に何もコードを触らずにエラーが出て起動しなかった。
現在は解決したが、備忘録として残しておく。

ローカルバージョン

  • node 19.1.0
  • nest 10.3.2

起動コマンド

npm run start

出力されたエラー文

> test-nest3@0.0.1 start
> nest start

error TS2688: Cannot find type definition file for 'lodash'.
  The file is in the program because:
    Entry point for implicit type library 'lodash'
../../../node_modules/@types/webpack/index.d.ts:650:14 - error TS1010: '*/' expected.

650


Found 2 error(s).

解決に試した方法

  1. 一旦下記の部分に注目し、モジュールをインストールしてみる。
error TS2688: Cannot find type definition file for 'lodash'.
npm install --save-dev @types/lodash

としてみたが、エラーが二つ出ていることを完全に見逃していた。

../../../node_modules/@types/webpack/index.d.ts:650:14 - error TS1010: '*/' expected.

650

こちらは全く分からない状態でした。

  1. いろんなコマンドを試して依存関係など試してみた。
  • nodeの他バージョンに変えて、最初(nestのインストール)からやり直す。
  • package.lock.jsonなどを消して依存関係を整理する。
  • npm i -g typescriptをインストール

何をしてもエラー文は変わらなかった。

なぜ解決したのか

エラー文に一部足して検索してみると下記ページに引っかかった。
https://stackoverflow.com/questions/63613644/fixing-ts2688-cannot-find-type-definition-file-in-node-modules
初めは質問者の方のコードをまず参考にしてみた。

ts.config.json
"compilerOptions": {
    ...
    "typeRoots" : ["./node_modules","./node_modules/@types"]
}

すると、エラー文が変わり、

error TS2688: Cannot find type definition file for '@ampproject'.
  The file is in the program because:
    Entry point for implicit type library '@ampproject'
error TS2688: Cannot find type definition file for '@angular-devkit'.
  The file is in the program because:
    Entry point for implicit type library '@angular-devkit'
...
error TS2688: Cannot find type definition file for 'yallist'.
  The file is in the program because:
    Entry point for implicit type library 'yallist'

Found 240 error(s).

大量の240個もエラーが出力されました。

変化があったという事はこれは大きな進歩だと思い、ここのコメントにも書かれていますが

ts.config.json
"compilerOptions": {
    ...
    "typeRoots": ["./node_modules/@types"]
}

これをヒントに自分のプロジェクトに追加の記述をすると無事起動できるようになりました。

こちらにしっかり記事を残されている方がいました。

所感

自分がTypescriptに疎いのでこのような事態になったかわかりませんが、少しの間調べていても日本語記事では出てこなかった。
ビルド時に型定義をTypescriptが上手く参照できなかったためにエラーが出た模様。ts.config.jsonの各プロパティにおいて今後も知っておく知識が出てきそうです。

Discussion