🫥
org-babelでJavaScriptを実行しようとすると"command not found: node" エラーになる
Emacsのorg-modeでJavaScriptを実行しようと思い、init.elに以下の記述をしました。
init.el
(require 'ob-js)
(org-babel-do-load-languages 'org-babel-load-languages
'((js . t))
)
そして、orgファイルにjsのコードブロックを記述し、実行してみましたが、
command not found: node
と言われてしまいます。
nodeはインストール済みです。念の為ターミナルで確認しました。
$ node --version
v20.6.1
しかし、org-modeのコードブロック上で実行すると...
なぜかnodeが見つかりません。何故?
原因
nvmでnodeをインストールしていたのが原因でした。
$ which node
/Users/<usename>/.nvm/versions/node/v20.6.1/bin/node
org-babel実行時に、.zshrc
で設定した環境変数がロードされていないためnodeが見つからなかったようです。
.zshrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # This loads nvm bash_completion
解決法
ユーザーのシェルの環境変数をロードするEmacsのパッケージexec-path-from-shell
をインストールすることで解決しました。
init.el
(use-package exec-path-from-shell
:config (exec-path-from-shell-initialize))
(require 'ob-js)
(org-babel-do-load-languages 'org-babel-load-languages
'((js . t))
)
雑談
node
と org-babel
と検索しても、JavaScriptコンパイラのBabel.js
しか出てこなくて困りました...
そして自分がnvmでnodeをインストールしていたことをすっかり忘れていたのでかなりこの問題にハマってしまいました。
とにかく解決できてよかった。
Discussion