LoginSignup
20
9

More than 3 years have passed since last update.

nuxt-ts のビルドが終わらない or 重い

Last updated at Posted at 2019-12-18

事態は突然に

公式通りに npx nuxt-create-app して Nuxt2.9 に TypeScript を導入,試しに npm run nuxt-ts すると当然のように成功した :blush:
ちょっと MacBook Air が熱っぽい気がしたけど空気は保温効果高いし仕方ない.

安心して今度はこう

npm run nuxt-ts generate
npm run nuxt-ts build

ーーいつもよりちょっとだけ賑やかな雰囲気の MacBook Airーー
ーー待つ私ーー
ーーついに喋り出したMacBook Airーー
ーー待つ私ーー
ーー唸り始めたAirーー
ーー待つ私ーー
ーー唸りをあげるAirーー
ーー待つ私ーー
ーーAirーー
ーー待っ

^C ^C ^C バチバチバチ

(訳:ファン全開にしてプロセス走っているのにビルドが95%から全く進まなかったので怖くなって途中で止めた

何が起きていたのか

とりあえず中断したが,なんかまだ裏で動いているっぽくてファンがうるさい.空気の癖に.
うるさいので強制終了させた

$ ps
  PID TTY           TIME CMD
45314 ttys000    0:01.45 /bin/bash -l
35311 ttys000    0:37.78 /hogehoge/node/v12.14.0/bin/node --max-old-space-size=2048 /hogehoge/node_modules/fork-ts-checker-webpack

$ kill 35311

$ ps
  PID TTY           TIME CMD
45314 ttys000    0:01.46 /bin/bash -l

ググった
これっぽい https://blog.johnnyreilly.com/2019/05/typescript-and-high-cpu-usage-watch.html

記事にあるように,nuxt.config.jsに環境変数を追加

nuxt.config.js
   mode: 'universal',
+  env: {
+    TSC_WATCHFILE: 'UseFsEventsWithFallbackDynamicPolling'
+  },
   head: {

もう一度 npm run nuxt-ts.さっきよりは静かになったが,ps で確認するとプロセスは動いてる.

npx run nuxt-ts build はさっきと一緒で成功しない.

しかし,Nuxt2.9 + TypeScript でこの現象に遭遇している人はあまりいないようだ.変だ.

直るのも突然(原因不明)

ググっても見つからないエラーって,関係ないところに原因があったりするよね

とりあえずで node_modules/.nuxt/ を削除しました (追記: 多分 dist/ も消してた)

rm -r node_modules
rm -r .nuxt

んで .eslintrc.js をこんな感じにした

.eslintrc.js
module.exports = {
  root: true,
  env: {
    browser: true,
    node: true
  },
  extends: [
    '@nuxtjs/eslint-config-typescript',
    'plugin:prettier/recommended',
    'prettier/vue',
  ],
  plugins: ['vue']
}

んで npm install してもう一回ビルドかけたら直った.

どれが原因でプロセスが死ななかったのかはわからなかったが,(自分含め) 誰かがいつか別のバージョンとかで引っかかるかもしれないので一応記事にしておく.

追記 (2020/1/2)

案の定引っかかりました.
今回は再現しやすかったので,ちょっと真面目に原因特定しようとしました.

こういうの(fork-ts-checker-webpack-plugin の issue についたコメント) も見つけましたが,少なくとも develop ブランチではビルド時に型チェックしたかったので,この方法は採用しないことにしました.

### 解決策(?原因は不明のまま(恐らくwebpackの設定)

  • dist/ フォルダを消す

build にしろ generate にしろ,nuxt-ts generate で生成される dist/_nuxt フォルダ内の js ファイルを見ているようで,それを消したら fork-ts-checker-webpack-plugin の暴走はとまりました.

webpack の設定真面目にしなくていいのが nuxt の売りの一つだと勝手に思ってたのですが,ちゃんと勉強しないといけないなと思いました.
ちゃんと理解したらまた追記します.

追記(2020/3/19) 原因特定

ありがたいことにコメントをいただきました。記事にしておくとこういうのが嬉しいですね。
typecheck に eslint を使っているのですが,eslint の ignorePath を通していなかったため,生成された dist/_nuxtpublic/,フォルダまで型チェックがなされており,そこで循環参照を起こして無限ループしていたようです。
上記で /dist を消したり /node_modules を消したりするとうまくいっているのはそのためでしょうね。

解決策

これで typecheck 時に無限ループに陥ることが防げるようです。

20
9
3

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
20
9