AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

direnv で nodenv を使う

久しぶりすぎて設定方法を忘れていた。

blocked

clone してきた直後なので blocked と言われる。 direnv allow したらとりあえずオッケー。

direnv: error /Users/donbulinux/Workspace/example/.envrc is blocked. Run `direnv allow` to approve its content

You must specify a $NODE_VERSIONS environment variable and the directory specified must exist!

allow した後に $NODE_VERSIONS が見つからないと言われる。

❯ cd example
direnv: loading ~/Workspace/example/.envrc
direnv: using node
direnv: You must specify a $NODE_VERSIONS environment variable and the directory specified must exist!
environment:1389: pop_var_context: shell_variables の先頭です。関数コンテキストではありません
environment:1: pop_var_context: shell_variables の先頭です。関数コンテキストではありません
direnv: error exit status 1

環境変数を素直にセットするとグローバルに適用されてしまうので、 .envrc に以下のように記載する。

.envrc

以下は anyenv で nodeJS 18.14.0 を使う例なので、インストールした nodenv のパスに合わせてください。

# nodenv
export NODE_VERSIONS=~/.anyenv/envs/nodenv/versions/
export NODE_VERSION_PREFIX=''
use node 18.14.0

以上

再び direnv allow すると、以下のように正常に読み込まれて終了です。

❯ direnv allow
direnv: loading ~/Workspace/example/.envrc
direnv: using node 18.14.0
direnv: Successfully loaded NodeJS v18.14.0, from prefix (/Users/donbulinux/.anyenv/envs/nodenv/versions///18.14.0)

エラーが出るパターン

以下のように、パス指定の最後に / をつけ忘れると versions ディレクトリ以下を検出できないようでエラーになるので気をつけてください。

export NODE_VERSIONS=~/.anyenv/envs/nodenv/versions

こうなる。

❯ direnv allow
direnv: loading ~/Workspace/example/.envrc
direnv: using node 18
direnv: Unable to find NodeJS version (18) in (/Users/donbulinux/.anyenv/envs/nodenv/versions)!
environment:1389: pop_var_context: shell_variables の先頭です。関数コンテキストではありません
environment:1: pop_var_context: shell_variables の先頭です。関数コンテキストではありません
direnv: error exit status 1