nuxt vue-tsc のエラー修正

# はしがき

重要度が高い module を install した commit を push しましたが、github action 上で build する時エラーが表示されました。

>/home/runner/work/mj_client/mj_client/node_modules/vue-tsc/bin/vue-tsc.js:68
throw err;
^
Search string not found: "for (const existingRoot of buildInfoVersionMap.roots) {"
(Use node --trace-uncaught ... to show where the exception was thrown)

vue-tsc っぽい問題、typescript は最近導入して、あちこち使っているし、重要度が高い module も諦められないので、あれこれ試してみました。

# 目標

重要度が高い module を install している状態です。

1. local から build する時、エラーが表示されないこと
1. github action から build する時、エラーが表示されないこと

## 試してみること

1. vue-tsc upgrade
1. nuxt upgrade
1. dependencies の version を固定すること(yarn の resolutions)
1. yarn.lock node_module 削除/インストール

# project module version

```json
// package.json
// だいぶ省略しました。
{
  "dependencies": {
    "nuxt": "3.12.2"
  },
  "devDependencies": {
    "typescript": "^5.4.5",
    "vue-tsc": "^2",
  },
  "resolutions": {
  },
}
```

# 解決方法

## 結論

```bash
$ yarn upgrade vue-tsc@^2.0.24
$ yarn upgrade typescript@^5.5
$ yarn upgrade nuxt@^3.12.3
```
多分、upgrade 順番は関係なく、できます。（順番を切れ変えて試してみましたので）

## 流れ

### vue-tsc upgrade

> /home/runner/work/mj_client/mj_client/node_modules/vue-tsc/bin/vue-tsc.js:68

これをみて、vue-tsc から問題があるかなと言っても、仕方がないので、早速検索しました。

https://github.com/vuejs/language-tools/issues/4484#issuecomment-2182469459

nuxt ではなく vue だし、typescript version が 5.5 なんですが、vue-tsc を v2 への upgrade すれば解決できる？と思って、upgrade しました。

```bash
$ yarn run tsc-vue@^2
```

> ERROR Cannot start nuxt: Cannot find module 'vue-tsc/out/index'

結果は失敗

### resolution

https://github.com/vuejs/language-tools/issues/3969#issuecomment-2199904728

v2 への upgrade してから、このようなエラーか。
v1 と戻るしかないのか。と思いながら、読み続いたら、

https://github.com/vuejs/language-tools/issues/3969#issuecomment-2199904728

dependencies の version を override する keyword を使ったら、すぐ直せそうらしいです。

```yml
// yarn.lock
vite-plugin-checker@^0.6.4
```

確かに、yarn.lock を確認したら、version が低いです。
なので、package.json に resolution を追加してみたら、

```json
// package.json
{
  "resolution": {
    "vite-plugin-checker": "0.7.0"
  }
}
```

> ERROR Cannot start nuxt: Cannot find module 'vue-tsc/out/index'

### nuxt, vue-tsc upgrade

同じか...と言っても、下の comment から hint を得られました。

https://github.com/vuejs/language-tools/issues/3969#issuecomment-2207075030

nuxt の version や vue-tsc の version が必要かなと思って、一緒に upgrade しました。

```bash
$ yarn upgrade nuxt@^3.12.3
$ yarn upgrade vue-tsc@^2.0.24
```

> ERROR  [uncaughtException] Cannot read properties of undefined (reading 'useCaseSensitiveFileNames')
 at Object.proxyCreateProgram (node_modules/vite-plugin-checker/node_modules/@volar/typescript/lib/node/proxyCreateProgram.js:33:68)
 at node_modules/vite-plugin-checker/dist/esm/checkers/vueTsc/typescript-vue-tsc/lib/typescript.js:120478:134
 at Object.<anonymous> (node_modules/vite-plugin-checker/dist/esm/checkers/vueTsc/typescript-vue-tsc/lib/typescript.js:190853:3)
 at Module._compile (node:internal/modules/cjs/loader:1241:14)
 at Module._extensions..js (node:internal/modules/cjs/loader:1295:10)
 at Module.load (node:internal/modules/cjs/loader:1091:32)
 at Module._load (node:internal/modules/cjs/loader:938:12)
 at Module.require (node:internal/modules/cjs/loader:1115:19)
 at require (node:internal/modules/helpers:130:18)
 at Object.configureServer (node_modules/vite-plugin-checker/src/checkers/vueTsc/main.ts:41:21)

他のエラーが出てきた！
全然嬉しくない、っと言っても、さっきのエラーより、わかりやすいです。

多分... @volar/typescript の version がバラバラになっていて、そうかな。yarn.lock から検索したら、version 二つインストールされているし、

```
// yarn.lock
"@volar/typescript@^2.3.0":
"@volar/typescript@~2.4.0-alpha.2":
```

これのせいで、間違っている version の module を参考しているかなと思いました。

```json
{
  "resolution": {
    "@volar/typescript": "2.4.0-alpha.2"
  }
}
```

同じエラーで失敗

### yarn.lock node_module 削除/インストール

```bash
$ rm -rf node_modules yarn.lock
$ yarn install
```

エラーなくできました。
が、多いの dependencies が、modules の version が、yarn.lock が変わりました。

### 元に戻す、無駄遣い

![スクリーンショット 2024-07-05 15.16.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3582489/619cdd44-a3db-0123-2c9e-6d26ab78fb88.png)

解決は嬉しいが、これほど多く変更したくありません。
なので、yarn.lock の変更の内容を見ながら、色々試してみました。

全部失敗したし、同じエラーなので、詳しく書きません。

1. なんか @volar/typescript の dependency @volar/language-core が version 2.4.0-alpha.2 -> 2.4.0-alpha.15 になったので、resolution に追加
1. `yarn upgrade vite-plugin-checker@^0.7.0`, `yarn upgrade @volar/typescript@^2.4.0` これは新しく module を install しましたので、棄却
1. `yarn add vite`

### typescript も upgrade したら？

そうだ、最初に参考したことの typescript の version は 5.5 だったので、upgrade しました。

```bash
$ yarn upgrade typescript@^5.5
```

問題なく、build します。

本当にエラーがないのかあれこれ試してみました。

```bash
# 元に戻す
$ rm -rf node_modules
$ git switch main
$ yarn run install

$ yarn upgrade vue-tsc@^2.0.24
$ yarn upgrade nuxt@^3.12.3
$ yarn upgrade typescript@^5.5

$ git add .
$ git commit -a
$ git push origin main
```

github action にも問題なく build されました。

# 参考&関連 URL

https://github.com/vuejs/language-tools/issues/4484

https://github.com/vuejs/language-tools/issues/3969

https://github.com/fi3ework/vite-plugin-checker/issues/306