电子ffi重建问题:未找到命令

时间:2018-05-19 19:46:26

标签: node.js electron ffi

我正在努力解决这个错误:

未捕获的例外情况: 错误:动态链接库(DLL)初始化例程失败。“

经过一些研究和调试,可能的问题是节点模块ffi尚未针对电子环境“重建”。我已尝试按照https://github.com/electron/electron/blob/master/docs/tutorial/using-native-node-modules.md中的步骤重建包,但方法1在复制到字母时不起作用。

“安装模块和重建电子”的方法2不起作用,因为输入./node_modules/.bin/electron-rebuild.cmd(我在Windows上)不起作用 - Bash只是说“命令没有发现“我没有看到其他人这个问题。我已经尝试过从PowerShell运行它以防git bash导致问题,但是我遇到了类似的问题,虽然我也收到错误声明:

At line:1 char:1
+electron-rebuild.cmd
+~~~~~~~~~~~~~~~~~~~
_CategoryInfo : ObjectNotFound: (electron-rebuild.cmd:String) [], CommandNotFoundException
+FullyQualifiedErrorID : CommandNotFoundException

我不明白方法3(手动构建Electron)并且犹豫是否使用它 - 即我不确定为什么手动构建命令中没有用于指定需要重建的包的参数。

我已经在项目文件夹中按照https://github.com/electron/electron-rebuild多次(npm install --save-dev electron-rebuild)中的说明重新安装了Electron Rebuild。它似乎安装在正确的位置。

为什么不能识别电子重建?如何正确安装ffi?

我也很感激,如果有人可以指点我一些额外的地方来教育我自己对这个问题的概念化可能会缺少什么。提前谢谢!

1 个答案:

答案 0 :(得分:2)

好的,这对我有用:

  1. 确保安装了Python 2.7.X。
  2. 获取并安装Visual Studio构建工具(例如Demo
  3. 要在重建期间使用正确的msvs版本,请在例如中输入。一个powershell:npm config set msvs_version 2015 --global
  4. 在我的最小例子中,我使用了以下package.json:
  5. {
      "name": "stack_ffi",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "electron .",
        "rebuild": "electron-rebuild -f -w ffi"
      },
      "author": "",
      "license": "XXX",
      "devDependencies": {
        "electron": "2.0.2",
        "electron-rebuild": "1.7.3"
      },
      "dependencies": {
        "ffi": "2.2.0",
        "ref": "1.3.5"
      }
    }

    • 运行npm run install,然后npm run rebuild

    备注:

    • 我第一次尝试电子没有正确安装所以我删除了 ./node_modules/electron文件夹并再次运行npm run install

    • 当我尝试在Windows上使用sqlite3.dll时,在线示例(http://landinghub.visualstudio.com/visual-cpp-build-tools) 不行。我不得不从库字符串中删除前导“lib”部分:var SQLite3 = ffi.Library('sqlite3', {...}); //was 'libsqlite3'

    • 我在节点7.4.0和8.0.0上测试了它。如果它在您的节点版本上失败 我有一个理论,v8::Object::ForceSet后来被删除了 版本

    • 我必须确保Windows可以找到我的dll。比如我 通过添加他们的文件夹包括sqlite3 x64 dll 位置到PATH env变量。