😎

Vercel が Bun 使っててキャッシュあるとビルド失敗する話

2024/04/19に公開

究極

タイトルそのままである

解決策

リデプロイする

エラー

究極、bunのエラーのようなNuxtのエラーのような、、、謎だが
少なくともnpmではエラーは出ないのだ

$ nuxt prepare
[error] No "exports" main defined in /vercel/path0/node_modules/estree-walker/package.json
  at exportsNotFound (node:internal/modules/esm/resolve:304:10)
  at packageExportsResolve (node:internal/modules/esm/resolve:594:13)
  at resolveExports (node:internal/modules/cjs/loader:590:36)
  at Module._findPath (node:internal/modules/cjs/loader:667:31)
  at Module._resolveFilename (node:internal/modules/cjs/loader:1129:27)
  at Module._load (node:internal/modules/cjs/loader:984:27)
  at Module.require (node:internal/modules/cjs/loader:1231:19)
  at require (node:internal/modules/helpers:179:18)
  at Object.<anonymous> (node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js:20:20)
  at Module._compile (node:internal/modules/cjs/loader:1369:14) 
[error] No "exports" main defined in /vercel/path0/node_modules/estree-walker/package.json
error: postinstall script from "sample-app" exited with 1
Error: Command "bun install" exited with 1

原因?

不明だが
package.json、というかNuxtのバージョンを変更すると毎回失敗するように思える。
Bunがキャッシュを使っているのだろうが、そこに問題があるのだろう。
キャッシュによって速度を担保するBunだが、果たして解決されるのかね

VercelがBun?

弊社は簡単なシステムのデプロイにはVercelを使用している。
デプロイに失敗したので見に行ったら、なんか「bun」って書いてる
マジか
弊社が開発にBunを使用しているからか、VercelがデフォルトでBunを採用しているからなのか知らないが、Nuxt3のプロジェクトのデプロイでBunが走っているようだ。

Bun

Bun」はJavaScriptランタイムとパッケージ管理ツールで、まあnpmやNodeみたいなもんだ。
仕組みはよく知らないが、とにかくnpmなんかより圧倒的に速いらしい。

論点

その速さが凄かったようで、出たばかりのころからあちこちで使われていた。
使われていた、が、当初はWindowsに対応しておらず、1.1からWindowsに対応するぞー
1.1出るぞ出るぞーーー
といいながらずいぶん待ったが、先日やっと1.1が出たところだ。
なんと1.0系は1.0.30までも出たのだ、どんだけだよ
さて、Windowsに対応してないのにβじゃないんかい、皆使うんかい、という不満がWindows派の私の中にはあったもののそこは本題ではない。

1.1から弊社でも使い始めたのだが、如何せんまだ不安定な部分も多い。
今回のケースは正にそうだが、何の条件も変えていないのにリデプロイしたら成功するなど、不明な挙動を見せる。
また、ロックファイルがあったりプロジェクトが動いていたり既存のnode_modulesがあると動きが変かな(リデプロイしたら動くくらいなので正直原因がどこにあったのかわからないが)と思うこともある。そのあたりの堅牢さはNode、npm流石というべきか。

兎も角、そんな不安定なBunがVercelで実用化されてしまった、、、
どうとらえるべきだろうか
そもそも、この不安定さはWindows限定かな??と思っていたが、Vercelの裏がWindowsとは思えないので、共通して不安定な部分があるんだろう

まとめ

まだ不安定にもかかわらず地位を確立させてしまったBunの速度たるや
Bunに飛びつくプログラマの先進主義たるや
そしてそれをサービスに組み込んでしまうVercelの思い切りの良さたるや
学ぶところ、考えるところはある気がする

私個人はMacよりWindows派、yarnよりnpm派、こないだまでPHP使っていたし、新しさや少しのメリットよりは、熟したアーキテクチャが好みなのだが
大きなメリットはそれを吹き飛ばせる魅力があるな
そもそも、Nuxt3使ってるわけだしな

が、Bunはまだちと怖い(使ってるけど)

Discussion