ViteRuby 3.7.0は起動方法のデフォルトがnpx経由になった

何が起きるのか

場合によっては以下のようなメッセージを目にして Vite が動かない。

Building with Vite ⚡️
rake aborted!
ViteRuby::MissingExecutableError: ❌ The vite binary is not available. Have you installed the npm packages?

悲しい。

  1. assets:precompile から ViteRuby が呼ばれる
  2. ViteRuby は「はいはい♪」と起動するフリをする
  3. 「Viteが見つからないよぉ、ちゃんとインストールしたの?」とキレられる

いやいや、この間まで動いてた環境のままやぞ?という話。

何が変わったのか

Vite 3.7.0 以降、

feat: change default execution to use `npx vite` instead by ElMassimo · Pull Request #480 · ElMassimo/vite_ruby

  • npm bin が消えます(npm v9 で消えました)
  • npx を代わりに使います

という話で、これだけなら

シンプルに Ruby と Vite を組み合わせただけの環境なら問題なく動作する

別に追加の設定は必要ない。

運悪く同じ現象に遭遇したら

今回自分がハマったのは

以上が揃っていたからで、yarn 経由でインストールした vite を、npx 経由では見つけることができずに起動に失敗するという現象だった。2

回避方法は

Configuring Vite Ruby | Vite Ruby

にあるように vite のパスを上書きしてあげる方法で、今回は

環境変数 VITE_RUBY_VITE_BIN_PATH./node_modules/.bin/vite を追加

して解決した。

  1. detect時にyarn.lockが見つかったらyarnから実行する処理になっているのだが、workspaceの関係で同じ階層にyarn.lockは存在しないのでyarn判定を外れ、npxが動く。 

  2. Dockerについては何も関係なかったことがあとで分かったが、手元のshellの環境とDocker環境での動作の食い違いのようにも見えてしまった。 

More