TryGhost/node-sqlite3

sqlite3 installs but fails on require/import in mingw64

woodbri opened this issue · 2 comments

Issue Summary

I am unable to use sqlite3 in node. I've tried multiple minimal scripts, but have narrow it down to a simple cli examples below. I get the same results using sqlite3 version 5.1.5, 5.1.6, and 5.1.7

Steps to Reproduce

$ npm -v
10.5.0
$ npm install sqlite3@5.1.7
$ node -e 'require("sqlite3")'
node:internal/modules/cjs/loader:1464
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: A dynamic link library (DLL) initialization routine failed.
\\?\C:\msys64\home\woodbri\work\test-sqlite3\node_modules\sqlite3\lib\binding\napi-v6-win32-unknown-
x64\node_sqlite3.node
    at Module._extensions..node (node:internal/modules/cjs/loader:1464:18)
    at Module.load (node:internal/modules/cjs/loader:1205:32)
    at Module._load (node:internal/modules/cjs/loader:1021:12)
    at Module.require (node:internal/modules/cjs/loader:1230:19)
    at require (node:internal/modules/helpers:179:18)
    at Object.<anonymous> (C:\msys64\home\woodbri\work\test-sqlite3\node_modules\sqlite3\lib\sqlite3
-binding.js:4:17)
    at Module._compile (node:internal/modules/cjs/loader:1368:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1426:10)
    at Module.load (node:internal/modules/cjs/loader:1205:32)
    at Module._load (node:internal/modules/cjs/loader:1021:12) {
  code: 'ERR_DLOPEN_FAILED'
}

Node.js v21.7.2

Version

5.1.5, 5.1.6, 5.1.7

Node.js Version

v21.7.2

How did you install the library?

MINGW64_NT-10.0-19045 DESKTOP-MD7Q6H6 3.5.3.x86_64 2024-05-06 06:45 UTC x86_64 Msys

Here is the same problem using --import=sqlite3

$ node --import=sqlite3
node:internal/modules/cjs/loader:1464
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: A dynamic link library (DLL) initialization routine failed.
\\?\C:\msys64\home\woodbri\work\test-sqlite3\node_modules\sqlite3\lib\binding\napi-v6-win32-unknown-
x64\node_sqlite3.node
    at Module._extensions..node (node:internal/modules/cjs/loader:1464:18)
    at Module.load (node:internal/modules/cjs/loader:1205:32)
    at Module._load (node:internal/modules/cjs/loader:1021:12)
    at Module.require (node:internal/modules/cjs/loader:1230:19)
    at require (node:internal/modules/helpers:179:18)
    at Object.<anonymous> (C:\msys64\home\woodbri\work\test-sqlite3\node_modules\sqlite3\lib\sqlite3
-binding.js:4:17)
    at Module._compile (node:internal/modules/cjs/loader:1368:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1426:10)
    at Module.load (node:internal/modules/cjs/loader:1205:32)
    at Module._load (node:internal/modules/cjs/loader:1021:12) {
  code: 'ERR_DLOPEN_FAILED'
}

Node.js v21.7.2

I was able to change this behavior by installing sqlite3 with:

pacman -S mingw-w64-x86_64-sqlite3

resulting in no longer getting the DLL error above but a different error as follows:

$ node inspect test2
< Debugger listening on ws://127.0.0.1:9229/cb31ec15-bf59-4346-bcd1-e4b56cf54276
< For help, see: https://nodejs.org/en/docs/inspector
<
connecting to 127.0.0.1:9229 ... ok
Break on start in test2:1
> 1 #!/usr/bin/env node
  2
  3 import sqlite3 from 'sqlite3';
debug> n
debug> There was an internal error in Node.js. Please report this bug.
read ECONNRESET
Error: read ECONNRESET
    at TCP.onStreamRead (node:internal/stream_base_commons:217:20)
    at TCP.callbackTrampoline (node:internal/async_hooks:130:17)
node:events:497
      throw er; // Unhandled 'error' event
      ^

Error: kill EPERM
    at ChildProcess.kill (node:internal/child_process:512:26)
    at process.handleUnexpectedError (node:internal/debugger/inspect:360:42)
    at process.emit (node:events:531:35)
    at process.emit (node:domain:488:12)
    at process._fatalException (node:internal/process/execution:178:25)
Emitted 'error' event on ChildProcess instance at:
    at ChildProcess.kill (node:internal/child_process:512:12)
    at process.handleUnexpectedError (node:internal/debugger/inspect:360:42)
    [... lines matching original stack trace ...]
    at process._fatalException (node:internal/process/execution:178:25) {
  errno: -4048,
  code: 'EPERM',
  syscall: 'kill'
}

Node.js v21.7.2