En tentant de créer une application SvelteKIT avec pnpm et better-sqlite3, je suis tombé sur une erreur et je vous montre aujourd’hui comment la corriger.

Voici l’erreur :

 → /Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/lib/binding/node-v127-darwin-arm64/better_sqlite3.node
    at bindings (/Users/admin/Downloads/test/node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js:126:9)
    at new Database (/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/lib/database.js:48:64)
    at file:///Users/admin/Downloads/test/create-db.js:3:12
    at ModuleJob.run (node:internal/modules/esm/module_job:271:25)
    at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:547:26)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:116:5) {
  tries: [
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/build/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/build/Debug/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/build/Release/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/out/Debug/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/Debug/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/out/Release/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/Release/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/build/default/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/compiled/22.13.0/darwin/arm64/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/addon-build/release/install-root/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/addon-build/debug/install-root/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/addon-build/default/install-root/better_sqlite3.node',
    '/Users/admin/Downloads/test/node_modules/.pnpm/better-sqlite3@11.8.1/node_modules/better-sqlite3/lib/binding/node-v127-darwin-arm64/better_sqlite3.node'
  ]

Il semble que le problème vienne d’un script qui s’exécute à l’installation qui n’a pas correctement fonctionné, je vous conseille de tenter supprimer les dossiers .svelte-kit, node_moduleset pnpm-lock.yaml.

Vous pouvez ensuite lancer la commande pnpm rebuild better-sqlite3, puis pnpm i et tester à nouveau votre application / script.

Si cela ne fonctionne pas, il faut ajouter une ligne dans votre fichier package.json dans la section pnpm, puis onlyBuiltDependencies. Votre fichier devrais maintenant ressembler à ça :

{
    "name": "test",
    "private": true,
    "version": "0.0.1",
    "type": "module",
    "scripts": {
        "dev": "vite dev",
        "build": "vite build",
        "preview": "vite preview",
        "prepare": "svelte-kit sync || echo ''",
        "format": "prettier --write .",
        "lint": "prettier --check ."
    },
    "devDependencies": {
        "@sveltejs/adapter-auto": "^4.0.0",
        "@sveltejs/kit": "^2.16.0",
        "@sveltejs/vite-plugin-svelte": "^5.0.0",
        "prettier": "^3.4.2",
        "prettier-plugin-svelte": "^3.3.3",
        "svelte": "^5.0.0",
        "vite": "^6.0.0"
    },
    "pnpm": {
        "onlyBuiltDependencies": [
            "esbuild",
            "better-sqlite3"
        ]
    },
    "dependencies": {
        "better-sqlite3": "^11.8.1"
    }
}

Vous pouvez ensuite répéter le processus, c’est à dire supprimer .svelte-kit, node_moduleset pnpm-lock.yaml. Lancer pnpm rebuild better-sqlite3, puis pnpm i et tester à nouveau votre application / script.

C’est corrigé ! ✅

Merci pour votre lecture.

Régler l’erreur Better SQLite 3