spacemacsでenv: node: No such file or directoryみたいな環境変数の問題が起きた時


要は、spacemacsを使っていて 環境変数系のエラーが起きた場合。

.spacemacs.env ( Space f e e)に原因があるかも。

spacemacsにおける環境変数の扱い

spacemacsは初回起動時の環境変数を .spacemacs.envにコピーし、以降はそちらを読み込むらしい。
参考 ayato-p - Spacemacsで環境変数が読まれなくて困った

つまり「spacemacsを初回起動した後に nvmとか nodeとかをインストールして使っている」場合、 PC本体にnvmやnodeの環境変数があるのに .spacemacs.envにはその環境変数が無いのでspacemacsでは読み込めない …が発生する。

たとえば nvmnodeを使い es-lintをかけてもらおうとした時、spacemacsではこういうエラーが出た。

prettier errors:
env: node: No such file or directory

そして .spacemacs.envでは nvmに関する環境変数 VMDIRや、 nodeに関する Pathが無かった😇

対処

.spacemacs.env冒頭の説明を参考にする。

# You can safely edit this file and tweak the values or remove the duplicates,
# Spacemacs won't overwrite it unless you call the function
# `spacemacs/force-init-spacemacs-env'.

つまり関数 spacemacs/force-init-spacemacs-envを呼び出せば上書きできる。

たとえば .spacemacsで以下のように追記すると、設定ファイルを読み込む度に環境変数も読み直してくれる(はず)。

(defun dotspacemacs/user-config ()
  ;; 環境変数を更新(.spacemacs.envを書き換える)
  (spacemacs/force-init-spacemacs-env)

  )

基本的にはこれで完了。

余談

Windowsの場合はなおも読み込まなかったり手強いので、もう .spacemacs.envのPATHに直接追記して上書き保存してしまう手もある(実際そうした)

なぜかprettierが効かなかったので、もしやnodeのPATHではと疑い .spacemacs.envのPATHに 使用しているnodeバージョンへのパスを追記したらチョット動いた。

たとえばユーザ v2okimochiがnvm-windowsを使っていてnode v10.14.0のとき、 C:\Users\v2okimochi\AppData\Roaming\nvm\v10.14.0をPATHに加えればチョット動く。

なぜチョットかというと、フォーマット違反の検出はしてくれるのに 自動整形はしてくれないから。 typescript-fmt-on-save tがあるのにどうして😇

ちなみにtypescript-linter 'eslintを明示しないとなんと検出すらしてくれなかった。ひどい。。。。。