🎑

pnpm + Drizzle ORM + better-sqlite3 で起こる Binding ファイルが見つからないエラーを解決する

に公開

タイトルの通り

TL;DR

pnpm approve-builds してあげる
https://pnpm.io/ja/cli/approve-builds

Problem

pnpm v10 からセキュリティ向上の名目で、依存しているパッケージのライフサイクルスクリプトが実行されないようになりました。
https://github.com/pnpm/pnpm/releases/tag/v10.0.0

pnpm approve-builds しない場合は、次のような問題が発生します。

> pnpm drizzle-kit migrate
No config path provided, using default 'drizzle.config.ts'
Reading config file '/home/tukimi/dev/test-sqlite-error/apps/setup/drizzle.config.ts'
Error: Could not locate the bindings file. Tried:
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/Debug/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/Release/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/out/Debug/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/Debug/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/out/Release/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/Release/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/default/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/compiled/24.11.0/linux/x64/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node
 → /home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/binding/node-v137-linux-x64/better_sqlite3.node
    at bindings (/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js:126:9)
    at new Database (/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/database.js:48:64)
    at connectToSQLite (/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/drizzle-kit@0.31.6/node_modules/drizzle-kit/bin.cjs:81301:24)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async Object.handler (/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/drizzle-kit@0.31.6/node_modules/drizzle-kit/bin.cjs:93721:39)
    at async run (/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/drizzle-kit@0.31.6/node_modules/drizzle-kit/bin.cjs:93116:7) {
  tries: [
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/Debug/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/Release/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/out/Debug/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/Debug/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/out/Release/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/Release/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/build/default/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/compiled/24.11.0/linux/x64/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node',
    '/home/tukimi/dev/test-sqlite-error/node_modules/.pnpm/better-sqlite3@12.4.1/node_modules/better-sqlite3/lib/binding/node-v137-linux-x64/better_sqlite3.node'
  ]
}

Fix

pnpm approve-buildsbetter-sqlite3 を指定すれば、インストール時にライフサイクルスクリプトが実行されます。


今日の感想:Major Version 上げるならちゃんとリリースノートを読もう。

Discussion