错误:无法找到绑定文件 better-sqlite3.node

问题描述 投票:0回答:5

问题

我的

better-sqlite3
安装可能存在一些问题,因为当我尝试使用 执行我的 index.js

(单击以在 Pastebin 上显示它)时

node index.js

总是有相同的结果。我在 MacOS 上尝试过,它可以工作,但在我的机器上基于 Linux Lite Ubuntu 的发行版上不是给了我以下相同的错误:

/home/mp8/webproject/electron-better-sqlite/node_modules/bindings/bindings.js:96
  throw err
  ^

Error: Could not locate the bindings file. Tried:
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/build/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/build/Debug/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/build/Release/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/out/Debug/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/Debug/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/out/Release/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/Release/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/build/default/better_sqlite3.node
 → /home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/compiled/8.11.3/linux/x64/better_sqlite3.node
    at bindings (/home/mp8/webproject/electron-better-sqlite/node_modules/bindings/bindings.js:93:9)
    at Object.<anonymous> (/home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/lib/database.js:4:40)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/mp8/webproject/electron-better-sqlite/node_modules/better-sqlite3/index.js:2:18)

我的目的是什么?

我想使用 better-sqlie33 作为我的数据库,因为 sqlite3 不提供节点 8.x 及更高版本的支持。

我尝试过的:

  1. 这个故障排除指南编号一和二,但我仍然有同样的错误。

  2. make init
    ,第一次安装
    better-sqlite3
    给了我错误文件make/makefile未找到。当我这样做时,我遇到了同样的错误
    npm install better-sqlite3 --save

  3. 确保better_sqlite3.node位于我的node-modules路径上。是的,它不在那里。

我想要什么?

我想像在 Mac 上运行它一样正确运行我的 index.js

依赖关系

make init 后的

package.json,如果不是,它只是一个

better-sqlite3
依赖项

{
  "_from": "better-sqlite3",
  "_id": "[email protected]",
  "_inBundle": false,
  "_integrity": "sha512-Y11HN9PQ9YUeKFMrmiHyOLAKElk2ATJzBZJvuzNwTMxoS7vUEEyLnUCtcBFqViLwbomr0RQwp2MBy/ogxF50PA==",
  "_location": "/better-sqlite3",
  "_phantomChildren": {},
  "_requested": {
    "type": "tag",
    "registry": true,
    "raw": "better-sqlite3",
    "name": "better-sqlite3",
    "escapedName": "better-sqlite3",
    "rawSpec": "",
    "saveSpec": null,
    "fetchSpec": "latest"
  },
  "_requiredBy": [
    "#USER",
    "/"
  ],
  "_resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-4.1.4.tgz",
  "_shasum": "9fe1dcf7b699087b98b1997cbb00261e265897e2",
  "_spec": "better-sqlite3",
  "_where": "/home/mp8/webproject/electron-better-sqlite",
  "author": {
    "name": "Joshua Wise",
    "email": "[email protected]"
  },
  "bugs": {
    "url": "https://github.com/JoshuaWise/better-sqlite3/issues"
  },
  "bundleDependencies": false,
  "dependencies": {
    "bindings": "^1.3.0",
    "integer": "^1.0.5"
  },
  "deprecated": false,
  "description": "The fastest and simplest library for SQLite3 in Node.js.",
  "devDependencies": {
    "benchmark": "^2.1.4",
    "chai": "^4.1.2",
    "cli-color": "^1.2.0",
    "fs-extra": "^5.0.0",
    "mocha": "^4.1.0",
    "sqlite": "^2.9.0"
  },
  "gypfile": true,
  "homepage": "http://github.com/JoshuaWise/better-sqlite3",
  "keywords": [
    "sql",
    "sqlite",
    "sqlite3",
    "custom",
    "aggregate",
    "database",
    "transactions"
  ],
  "license": "MIT",
  "name": "better-sqlite3",
  "repository": {
    "type": "git",
    "url": "git://github.com/JoshuaWise/better-sqlite3.git"
  },
  "scripts": {
    "benchmark": "node benchmark",
    "install": "node-gyp rebuild",
    "install-debug": "node-gyp rebuild --debug",
    "lzz": "lzz -hx hpp -sx cpp -k BETTER_SQLITE3 -d -hl -sl -e ./src/better_sqlite3.lzz",
    "posttest": "rm -r ./temp/",
    "prepublishOnly": "npm run lzz",
    "pretest": "rm -r ./temp/ || true && mkdir ./temp/",
    "rebuild": "npm run lzz && node-gyp rebuild",
    "rebuild-debug": "npm run lzz && node-gyp rebuild --debug",
    "test": "$(npm bin)/mocha --bail --timeout 5000 --slow 5000"
  },
  "version": "4.1.4"
}

我的机器

Linux Lite 4.0, Ubuntu Based.
NVM (Node version Manager)
Node 8.11.1
NPM 5.6
javascript node.js sqlite node-gyp better-sqlite3
5个回答
5
投票

我遇到的问题看起来像你的问题

尝试一下:

projectToto > $

sudo rm -rf node_modules/

projectToto > $

npm install bindings

npm 关于绑定 -> https://www.npmjs.com/package/bindings


2
投票

我遇到了类似的情况,直到我意识到我没有在那台机器上明确安装构建工具。这是从项目目录中运行时为我解决的问题(Ubuntu)

$ rm -rf node_modules/
$ rm package-lock.json

$ npm install build-tools -g
$ npm install

1
投票

对我来说,问题出在我的项目中的循环依赖(角度 10.1.1,节点 12.22.6)。

弄清楚这一点有点棘手。 Angular 编译器给出了多个“检测到循环依赖中的警告:...”错误,但其中没有一个包含实际引入错误的文件。我必须回溯该项目,直到提交时不再出现问题,然后调查发生了什么变化。这一变化看起来相当无害——一个文件导出了一个由另一个文件导入的常量。改变出口的方向解决了问题。


1
投票

如果什么都不起作用......

创建一个新文件夹:

  1. 使用 npm 安装新副本,这将创建包含所有必需文件的 node_module 文件夹。

  2. 复制node_module文件夹并替换为现有项目的node_module文件夹。

  3. 关闭cmd

  4. 重新启动服务器。

它对我有用......


0
投票

我在 Windows 11 上的 docker 中突然遇到了这个问题,使用 wsl2 和 ubuntu 作为发行版。我只是在 dockerfile 中移动复制语句。我没有做任何事去触碰它。我什至清除了所有缓存,删除了node_modules,在我的本地计算机和docker上重新安装了它。

我真的尝试了这里的一切,但没有任何效果。在我执行到我的容器中后,我也尝试执行

npm run build-release
命令,但它大喊我没有 python。我可以安装 python,但每次我都必须这样做,或者更糟糕的是,将它添加到我的图像中。

我更简单的解决方案是将

better-sqlite3
安装在
Dockerfile
内,因为它是本机 Node.js 模块并将其从
package.json
中删除。需要注意的是,如果没有 docker,它就无法在本地工作,但如果愿意,任何人都可以再次使用
pnpm i better-sqlite3
添加它。

Dockerfile

# Install native node_modules in Dockerfile so it uses pnpm's supportedArchitectures feature in package.json. sharp is required only if you use next/image optimization while better-sqlite3 is used in the app itself
RUN pnpm install [email protected] [email protected]

package.json

{
    "dependencies": {
    "@ngneat/falso": "^7.2.0",
    "@t3-oss/env-nextjs": "^0.9.2",
    "drizzle-orm": "^0.30.1",
    "jiti": "^1.21.0",
    "next": "14.1.3",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "std-env": "^3.7.0",
    "zod": "^3.22.4"
  },
  "devDependencies": {
    "@types/better-sqlite3": "^7.6.9",
    "@types/node": "^20.11.27",
    "@types/react": "^18.2.65",
    "@types/react-dom": "^18.2.22",
    "dotenv": "^16.4.5",
    "drizzle-kit": "^0.20.14",
    "knip": "^5.0.4",
    "rimraf": "^5.0.5",
    "tsx": "^4.7.1",
    "typescript": "^5.4.2"
  },
  "pnpm": {
    "supportedArchitectures": {
      "os": [
        "current"
      ],
      "cpu": [
        "x64",
        "arm64"
      ]
    }
  }
}

完整的存储库位于 https://github.com/deadcoder0904/easypanel-nextjs-sqlite如果您想引用它。

© www.soinside.com 2019 - 2024. All rights reserved.