En Windows 10 Home (en x64 bits), intenté ejecutar el siguiente comando en un símbolo del sistema:
nodo index.js
El error fue el siguiente:
C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\bindings\bindings.js:121 throw e; ^
Error: \?\C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\better-sqlite3\build\Release\better_sqlite3.node no es una aplicación Win32 válida. \?\C:\Users\humay\OneDrive\Coding\sil\node_modules\better-sqlite3\build\Release\better_sqlite3.node en Object.Module._extensions..node (node:internal/modules/cjs/loader:1183 :18) en Module.load (node:internal/modules/cjs/loader:981:32) en Function.Module._load (node:internal/modules/cjs/loader:822:12) en Module.require (nodo: internal/modules/cjs/loader:1005:19) en require (node:internal/modules/cjs/helpers:94:18) en enlaces (C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\bindings\bindings .js:112:48) en Objeto. (C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\better-sqlite3\lib\database.js:9:24) en Module._compile (node:internal/modules/cjs/loader:1101:14) en Object.Module._extensions..js (nodo:internal/modules/cjs/loader:1153:10) en Module.load (nodo:internal/modules/cjs/loader:981:32) en Function.Module._load (nodo :internal/modules/cjs/loader:822:12) en Module.require (node:internal/modules/cjs/loader:1005:19) en require (node:internal/modules/cjs/helpers:94:18) en Objeto. (C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\better-sqlite3\lib\index.js:2:18) en Module._compile (node:internal/modules/cjs/loader:1101:14) en Object.Module._extensions..js (nodo:internal/modules/cjs/loader:1153:10) { código: 'ERR_DLOPEN_FAILED' }
Estoy usando la siguiente versión de nodo: v16.6.2
Ahora no necesito ayuda, el problema fue que instalé x86 en lugar de x64, lo cual fue un error honesto.
¿Cómo supe que cometí este error? Bueno, honestamente, miré otros archivos de otra versión de Nodejs y terminó en x64 en lugar de x86. Honestamente, fue mi error y debería haberlos mirado antes de instalar la nueva versión de Nodejs.
Muchos módulos de nodo son solo JavaScript y son portátiles entre sistemas. Algunos, sin embargo, contienen código compilado nativo. La biblioteca SQLite que está utilizando no es 'JavaScript puro' y se basa en un binario.
Cuando npm install -ed instaló un binario para el sistema que estaba usando en ese momento, por ejemplo, estaba en una Mac. El archivo better_sqlite3.node era para ese sistema operativo específico.
Luego abrió este proyecto en una computadora diferente pero también copió sobre el directorio node_modules . Al igual que no puede ejecutar archivos .app en Windows o (generalmente) .exe en Linux, este binario no es compatible con su sistema operativo. Al eliminar y luego volver a instalar la biblioteca SQLite, se instalará un binario compatible con Windows.
Dado que su proyecto está en una carpeta de OneDrive, es posible que esté cambiando entre sistemas operativos. Eso podría hacer que este proceso sea tedioso. Una solución alternativa sería instalar el módulo SQLite globalmente, pero eso tiene algunos inconvenientes.
require() buscará no solo en el directorio actual, sino también recursivamente en los directorios superiores (por ejemplo ...\OneDrive\Coding\sil , luego ...\OneDrive\Coding , luego ...\OneDrive ), antes de verificar el directorio mundial.