• 作成:

Emacsを使うとparcel watchが🚨 Cannot read property 'type' of undefinedで動かない問題を解決する

yarn parcel watch --out-dir dist src/index.html

のようにparcel watchを実行している時Emacsでファイルを編集すると

🚨  Cannot read property 'type' of undefined

とエラーが出てきてファイルが更新されません. Hot Module Replacementのせいかなと思って--no-hmrを付け足してみましたが改善しません.

これは既に報告されていて, Cannot read property 'type' of undefined · Issue #2749 · parcel-bundler/parcel

だいたいの環境ではセーフライトが原因のようです.

実際nanoで編集してみたら問題ありませんでした.

しかしEmacsでセーフライトを無効化する方法がわからない. 検索してもわからない. そもそもsafe writeをEmacsは採用しているのか?

考えて念じながらモニターをにらみつけて

 '(vc-make-backup-files t)              ; VCS以下のファイルもバックアップを作成する

を削除すればバックアップファイルが作られなくなって解決することがわかりました.

VCS管理下じゃない所でparcel使う予定はないのでひとまずこれでOKです.

しかし,

 ;; バックアップ先をカレントディレクトリから変更
 '(backup-directory-alist `(("" . ,(concat user-emacs-directory "file-backup/"))))

でカレントディレクトリにはバックアップファイルを作らないようにしているはずなのでwatchには干渉しないと思っていたのですが… 謎ですね.

ともかくVCS以下のバックアップファイルはこれまでコミットしてないファイルを守るために必要だったのですが, 最近はBtrfsを使うようになって, Emacsが保存で頑張らなくても自動的にスナップショットが取られるようになったので不要になってきたので削除します.

デスクトップLinuxにBtrfsとSnapperを使うようになってファイルを間違えて削除してしまう恐怖から開放されました - ncaq

起きないはずの現象が起きるのは不思議でプログラマ的にはこれを探らないのは微妙ですが, ともかく動くようにはなりました.

これでwatchパッケージを独自に使ってparcelのwatchを動かす必要もありませんね. 一々起動するコストもなくなりました.

ちなみにparcel 2の新しいwatcherではこの問題は解決していてエディタの設定を弄らなくても問題なくなるらしいですよ. いつリリースされるのかは知りませんが.